我正在使用 Ruby Sequel (ORM gem) 连接到 Postgres 数据库。我没有使用任何模型。我的插入语句似乎自动附加了一个“返回 null”(因此不会返回新插入的行 id/pk)。这有什么用?为什么这是默认设置?更重要的是,我如何禁用它(连接范围)?
另外,我注意到有一个 dataset.returning 方法,但它似乎不起作用!
require 'sequel'
db = Sequel.connect 'postgres://user:secret@localhost/foo'
tbl = "public__bar".to_sym #dynamically generated by the app
dat = {x: 1, y: 2}
id = db[tbl].insert(dat) #generated sql -- INSERT INTO "public"."bar" ("x", "y") VALUES (1, 2) RETURNING NULL
不知道这是否重要,但有问题的表是继承的(使用 postgres 表继承)
红宝石 1.9.3p392 (2013-02-22) [i386-mingw32]
续集 (3.44.0)
--Edit 1 -- 经过一些故障排除后--
看起来表继承可能是这里的问题。Sequel 似乎自动运行查询来确定表的 pk(在我的情况下,pk 是在链上的表上定义的),没有找到可能附加了“返回 null”?
SELECT pg_attribute.attname AS pk FROM pg_class, pg_attribute, pg_index, pg_namespace WHERE pg_class.oid = pg_attribute.attrelid AND pg_class.relnamespace = pg_namespace.oid AND
pg_class.oid = pg_index.indrelid AND pg_index.indkey[0] = pg_attribute.attnum AND pg_index.indisprimary = 't' AND pg_class.relname = 'bar'
AND pg_namespace.nspname = 'public'
--编辑2--
是的,看起来这就是问题所在!