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

标签 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

最佳答案

你可以使用setval()创建序列后:

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

关于sql - 如何使用查询的起始值创建序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50411113/

相关文章:

sql - 处理 SQL 特殊字符

mysql - 生产中使用 mysql 的 Entity Framework 代码优先

postgresql - psql 将选择计数传递给变量

postgresql:如何使用特定数据库

postgresql - 控制输出中的 psql 十进制数字

mysql - 这条SQL中的 "t"指的是什么?

sql - "Distinct"导致复杂查询

sql - 将每月的第一天和最后一天放入变量中 - Oracle

sql - 用问题中给出的日期做数学

ruby-on-rails - rails + ActiveRecord : comparing dates