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')
。
我正在尝试将数据插入由以下架构定义的名为 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')
。