Что такое последовательности (sequences) в PostgreSQL?
Есть проект, написанный на Zend, при вставке в базу (через представление) присутствует некий sequence. Что он значит, как работает и как его реализовать - не понятно.
В другом проекте, с тойже БД и такими же привилегиями (читай: гранты одинаковые) - вставка в БД просто не происходит. Говорит, мол прав нет. ...
Sequences в PostgreSQL - генераторы уникальных последовательностей чисел, использовать можно аналогичным auto_increment полям образом в MySQL. Т.е. создаете sequence для таблицы, при вставке в нее новой записи в поле, которое должно быть уникальным (primary key) пишете значение, которое выдает sequence, созданный для этой таблицы.
@vdem, т.е. сначала выполнить SELECT nextval('seq_name'); и возвращаемое значение использовать при вставке?
Это бредово, ведь последовательность должна срабатывать сама, без прямой вставки идентификатора о_О
Обычно, я создавая автоинкрементное поле называл его id, ставил тип serial и pk обозначал. Все остальное (в т.ч. последовательность создается сама)...
Как быть, если в таблице нет primary key и на уникальном идентификаторе стоит последовательность?
@Roquie А при чем тут primary key к последовательностям? Sequence можно использовать как угодно, они просто выдают уникальные значения каждый раз при вызове nextval(). Очевидный способ использования - аналогично auto_increment в MySQL.
@vdem, хз причем ) просто меня коробит тот факт, что при фактически одном и томже пользователе БД, вставка работает при указании этого поля в атрибутах класса. И только с query buider от Zend. wtf?
@Roquie sequence указывается при создании таблицы с автоинкрементальным полем. А так вообще может использоваться и отдельно сам по себе. Например, для генерации идентификатора новой транзакции/пользователя/компании и т.д.