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

时间:2018-05-18 12:12:59

标签: sql postgresql psql

在数据库迁移脚本(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 :(得分:4)

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

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