dense_rank 在串行列上使用 setval(在 PSQL 13 中查询)

dense_rank with setval on serial column (query in PSQL 13)

我正在尝试将数据插入由以下架构定义的名为 test 的 table 中:
CREATE TABLE test (s INTEGER, p INTEGER, o INTEGER, id SERIAL NOT NULL)

然后我运行这个查询来设置列id的起始值:SELECT setval('test_id_seq', 12)

最后我用这个查询插入:INSERT INTO test SELECT s, p, o, dense_rank() over (order by p) from test;

问题是我得到了以下信息:

 s | p | o | id
---+---+---+----
 4 | 6 | 2 |  1
 5 | 6 | 8 |  1
 4 | 7 | 3 |  2
 5 | 7 | 1 |  2

而不是:

 s | p | o | id
---+---+---+----
 4 | 6 | 2 | 13
 5 | 6 | 8 | 13
 4 | 7 | 3 | 14
 5 | 7 | 1 | 14

如何使 dense_rank() 函数从我的 'test_id_seq' 开始? 我正在使用 PostgreSQL 13。

如@Stefanov.sm

所述

解决方法是在插入语句中使用dense_rank() over (order by p) + currval('test_id_seq')