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

4

在数据库迁移脚本(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;

使用SELECT INTO语句并不能解决问题,因为访问需要另一个SELECT查询。

使用静态值可以正常工作:

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

如何使用动态起始值?
Postgres 9.6

为什么要使用序列?只需定义一个连续的值即可。 - Gordon Linoff
@GordonLinoff 这与我的其他问题/答案 https://stackoverflow.com/a/50388597/196241 有关,需要处理一个表的不同序列,简而言之,总结问题。 - w.k
1个回答

9

在创建序列后,您可以使用setval()函数:

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

不错的方法,但仍然想了解如何在脚本中分配动态值。 - w.k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接