Как создать последовательность, используя начальное значение из запроса? - PullRequest
0 голосов
/ 18 мая 2018

В скрипте миграции базы данных (psql) я хочу создать последовательность, начиная с определенного значения, запрашиваемого из таблицы, например:

CREATE SEQUENCE book_id_seq START ( SELECT MAX(id) + 1 FROM book.book );

или пытался установить \set start (SELECT MAX(id) + 1 FROM book.book) для использования переменной, например:

CREATE SEQUENCE book_id_seq START :'start';

Но использование \set не интерпретировало запрос.

Другой способ установки переменной также не работал

start := SELECT MAX(id) + 1 FROM book.book;

выдал ошибку:

ERROR:  syntax error at or near ":="
LINE 1: start := SELECT MAX(id) + 1 FROM book.book;

Выбор значения INTO также не помогает, потому что для доступа требуется другой запрос SELECT.

Использование статического значения работает нормально:

\set start 33
CREATE SEQUENCE book_id_seq START :'start'::int;

Как использовать динамическое начальное значение?

Postgres 9,6

1 Ответ

0 голосов
/ 18 мая 2018

вы можете использовать setval() после создания последовательности:

CREATE SEQUENCE book_id_seq;
select setval('book_id_seq', (SELECT MAX(id) + 1 FROM book.book));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...