不必要的选择主键序列调用

时间:2010-10-27 20:28:04

标签: ruby-on-rails postgresql

我最近使用类似于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进行此查询吗? (或解释为什么有必要)。感谢。

1 个答案:

答案 0 :(得分:1)

该查询正在检查数据库目录,以查看“posts”表的主键是否附加到序列,而不是尝试从序列中获取值。