如何使用查询的起始值创建序列?

How to create sequence using starting value from query?

在数据库迁移脚本 (psql) 中,我想从 table 查询的特定值开始创建序列,例如:

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

您可以在创建序列后使用setval()

CREATE SEQUENCE book_id_seq;
select setval('book_id_seq', (SELECT MAX(id) + 1 FROM book.book));