Ненужный выбор последовательности вызовов первичного ключа - PullRequest
4 голосов
/ 28 октября 2010

Недавно я переключился с использования целочисленных идентификаторов последовательности на UUID для первичных ключей в моем приложении Rails 3 с использованием Postgresql, используя метод, аналогичный этот метод .Таким образом, ни в одной из моих таблиц нет последовательностей, но 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 Ответ

1 голос
/ 07 января 2011

Этот запрос проверяет каталог базы данных, чтобы определить, присоединен ли первичный ключ таблицы "posts" к последовательности или нет, вместо того, чтобы пытаться получить значение из последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...