Автоматизация стандартных процедур
В листинге 7.32 приведены оба варианта замены текущего значения последовательности shipments_ship_id_seq с последующими вызовами nextval (), демонстрирующими полученный результат.
Листинг 7.32. Изменение текущего значения последовательности.
booktown=# SELECT setval('shipments_ship_1d_seq'. 1010); setval 1010 (1 row) booktown=# SELECT nextval('shipments_ship_id_seq'); nextval 1011 (1row) booktown=# SELECT setvalСshipments_ship_id_seq', 1010 .false); setval 1010 (1 row) booktown=# SELECT nextval ('shipnients_ship_id_seq'); nextval 1010 (1 row)
Внимание
Последовательности обычно применяются для обеспечения уникальности значений полей. Прежде чем изменять атрибут last_value, убедитесь в том, что вы хорошо понимаете все возможные последствия.
Удаление последовательности
Команда SQL DROP SEQUENCE удаляет последовательность или несколько последовательностей одновременно.
Синтаксис команды DROP SEQUEICE:
DROP SEQUENCE последовательность [….]
В качестве параметра команде передается имя удаляемой последовательности. Допускается одновременное удаление нескольких последовательностей, перечисленных через запятую.
В листинге 7.33 удаляется последовательность shipments_ship_id_seq.
Листинг 7.33. Удаление последовательности.
booktown=# DROP SEQUENCE shipments_ship_id_seq; DROP
Прежде чем уничтожать последовательность, убедитесь в том, что она не используется другой таблицей, функцией или другим объектом базы данных. Если забыть об этой проверке, это нарушит работу других операций, зависящих от данной последовательности. Следующий запрос возвращает имена всех отношений, в которых заданная последовательность используется при вычислении значений по умолчанию:
SELECT p.relname .a.adsrc FROM pg_class p JOIN pg_attrdef a ON (p.relfilenode = a.adrelid) WHERE a.adsrc – '"последовательность"';
В листинге 7.34 с помощью этого запроса выполняется поиск имен таблиц, у которых последовательность shipments_ship_id_seq используется для вычислений значений по умолчанию.
Листинг 7.34. Проверка зависимостей.
Dooktown=# SELECT p.relname .a.adsrc FROM pg_class p JOIN pg_attrdef a booktown-# ON (p.relfilenode = a.adrelid) booktown-# WHERE a.adsrc – '"shipments_ship_id_seq"'; relname | adsrc shipments | nextvaK'"sh1pments_ship_id_seq"'::text) (1 row)