我最近使用类似于this method的方法切换到使用Postgresql在我的Rails 3应用程序中使用整数序列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进行此查询吗? (或解释为什么有必要)。感谢。
答案 0 :(得分:1)
该查询正在检查数据库目录,以查看“posts”表的主键是否附加到序列,而不是尝试从序列中获取值。