PostgreSQL:从 MAX(the_column)+1 处开始一个序列

PostgreSQL: starting a sequence at MAX(the_column)+1

我想向可能已经有数据的列添加一个序列,所以我试图在已有数据之外开始它。假设已经有数据,我想这样做:

CREATE SEQUENCE my_sequence MINVALUE 1000000 START
    (SELECT MAX(id_column) FROM my_table) OWNED BY my_table.id_column;

但它一直死于 ( 声称语法错误。这就像起始值必须是冷硬的数字——没有任何象征意义。

当然,更好的解决方案是,如果序列能够足够智能以避免重复值,因为 id_column 对其有唯一的约束——这就是我这样做的原因。但据我所知,这是不可能的。

我也试过跳过 START 然后做:

ALTER SEQUENCE my_sequence RESTART WITH (SELECT max(id_column)+1 FROM my_table);

但是,再一次,它看起来不像是符号起始值。

我是 运行 PostgreSQL 9.4,但我们的一些客户正在使用像 8.3 这样原始的东西。

您不能为起始值指定动态值。

但是您可以在创建序列后设置该值:

CREATE SEQUENCE my_sequence MINVALUE 1000000 OWNED BY my_table.id_column;
select setval('my_sequence',  (SELECT MAX(id_column) FROM my_table));

您可以按要求恢复序列:

select setval('my_sequence', (SELECT MAX(id_column) FROM my_table));

适用于 Postgres 9.2。