【发布时间】:2010-10-27 20:28:03
【问题描述】:
我最近使用 Postgresql 在我的 Rails 3 应用程序中使用类似于 this method 的方法从使用整数序列 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 进行此查询? (或解释为什么有必要)。谢谢。
【问题讨论】: