【发布时间】:2020-06-23 22:48:26
【问题描述】:
我想在 PostgreSQL 数据库中使用 regclass 类型的列。显然 Rails 不知道这种类型,因为我得到了unknown OID 2205: failed to recognize type of 'relname'. It will be treated as String.。将其视为字符串可以读取,但是在尝试将内容存储回数据库时会出现问题。
据我了解,通常定义一个 Type::Value 类的后代来执行来回转换。这个转换有点麻烦,因为通常在 SQL 中使用'some_table'::regclass。在 Ruby 中这样做会导致另一个数据库往返。
是否可以让 Arel(?) 在最终的 SQL 语句中发出这样的构造?因此,如果我执行Something.find(relname: 'some_table'),它会发出... WHERE "relname" = $1 :: regclass,也就是说,如果我提供了一个字符串类型的对象,它会在PostgreSQL 端使用强制转换。或者更好的是WHERE "relname"::text = $1。
我知道我可以做到where("relname::text=?", 'some_table')。但是,如果我使用#first_or_create!,我必须明确指定这个。我很好奇它是否可以更加无缝。
【问题讨论】: