【问题标题】:How to create sequence using starting value from query?如何使用查询的起始值创建序列?
【发布时间】:2018-05-18 12:12:59
【问题描述】:

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

【问题讨论】:

  • 为什么要使用序列?只需定义一个序列值。
  • @GordonLinoff 它与我的其他 Q/A stackoverflow.com/a/50388597/196241 相关,需要为一个表处理单独的序列,简而言之总结问题。

标签: sql postgresql psql


【解决方案1】:

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

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

【讨论】:

  • 不错的方法,仍然热衷于理解,如何在脚本中分配动态值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2015-07-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多