我最近使用类似于 this method 的方法在我的 Rails 3 应用程序中使用 Postgresql 的主键从使用整数序列 ID 切换到 UUID。 .因此,我的所有表都没有序列,但 Rails 仍在(我认为是)在创建记录时不必要地调用选择序列。例如:
PK and serial sequence (1.3ms) SELECT attr.attname, seq.relname
FROM pg_class seq,
pg_attribute attr,
pg_depend dep,
pg_namespace name,
pg_constraint cons
WHERE seq.oid = dep.objid
AND seq.relkind = 'S'
AND attr.attrelid = dep.refobjid
AND attr.attnum = dep.refobjsubid
AND attr.attrelid = cons.conrelid
AND attr.attnum = cons.conkey[1]
AND cons.contype = 'p'
AND dep.refobjid = '"posts"'::regclass
我相信这是由函数 pk_and_sequence_for 生成的,我的模式的相关部分是:
t.uuid "id", :null => false, :primary => true
uuid 类型只有 32 个字符。
谁能告诉我一个优雅的方法来防止 Rails 进行此查询? (或解释为什么有必要)。谢谢。
最佳答案
该查询正在检查数据库目录以查看“posts”表的主键是否附加到序列,而不是尝试从序列中获取值。
关于ruby-on-rails - 不必要的选择主键序列调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4037401/