我想将一个序列添加到可能已有数据的列中,所以我试图将其启动到已经存在的任何内容之外。假设已有数据,我想这样做:
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一样原始。
答案 0 :(得分:3)
您无法为起始值指定动态值。
但是您可以在创建序列后设置值:
CREATE SEQUENCE my_sequence MINVALUE 1000000 OWNED BY my_table.id_column;
select setval('my_sequence', (SELECT MAX(id_column) FROM my_table));
答案 1 :(得分:1)
您可以通过请求恢复您的序列:
select setval('my_sequence', (SELECT MAX(id_column) FROM my_table));
适用于 Postgres 9.2。