POSTGRESQL:如何将表的最后一个ID设置为序列的起始值
POSTGRESQL:如何将表的最后一个ID设置为序列的起始值
为了向表中插入值,我需要读取该表的最后一个主键值,并从那里开始我的序列。但是我遇到了一个错误。\n我的查询如下所示:\n
CREATE SEQUENCE serial START( SELECT cd.id + 1 FROM cd ORDER BY cd.id DESC LIMIT 1); INSERT INTO cd(id, class) SELECT (nextval('serial'), ( SELECT class_name FROM another_table WHERE some_condition ) FROM cr DROP SEQUENCE IF EXISTS serial;
\n错误如下所示:\n
错误:附近有语法错误"(" 第1行:CREATE SEQUENCE serial START( SELECT cd.id + 1 FROM cd
\n我该如何获得主键的最后一个值并从那里开始我的序列?\n我不允许更改表设计,所以我无法为表的主键定义一个序列。
问题的原因是需要将一个表的最后一个id作为序列的起始值。
解决方法是使用以下代码:
BEGIN TRANSACTION; CREATE SEQUENCE serial START 1; INSERT INTO cd(id, class) SELECT (nextval('serial') + (select max(id)+1 from cd), ( SELECT class_name FROM another_table WHERE some_condition ) FROM cr DROP SEQUENCE IF EXISTS serial; COMMIT;
以上代码通过创建一个名为`serial`的序列,并将其起始值设为1。然后,它将使用`SELECT`语句从`cd`表中获取最大的id,并将其值加1后插入到`cd`表中的`id`列中。另外,它还使用了一个子查询来获取`another_table`表中的`class_name`,并将其插入到`cd`表中的`class`列中。
最后,它删除了序列`serial`,并提交了事务。
通过以上步骤,我们可以将一个表的最后一个id设置为序列的起始值。