如何找到主键序列和主键的最大值
How to find the the primary key sequence and the max of primary key
我知道这个问题有点傻,我需要 运行 这些查询来查看值是否不同步,但我收到类似 'relation does not exist':
SELECT MAX(the_primary_key) FROM the_table;
SELECT nextval('the_primary_key_sequence');
我有一个名为 "Audit" 的 table,主键列为 'auditID'。当我 运行 第一个查询时,我得到了结果:
SELECT MAX('auditID') FROM "Audit";
max
---------
auditID
(1 row)
但最大值应大于 10000。
然后我 运行 第二个查询,我得到错误 'relation "the_primary_key_sequence" or "Audit_auditID_seq" does not exist'。
如何检查主键序列是否存在?
错误:
select setval('Audit_auditID_seq', 171832, true);
ERROR: relation "audit_auditid_seq" does not exist
LINE 1: select setval('Audit_auditID_seq', 171832, true);
我想出了我所有的问题,引号在这种情况下非常敏感;
SELECT MAX("auditID") FROM "Audit";
max
--------
171832
(1 row)
SELECT nextval('"Audit_auditID_seq"');
----
139801
最后使值相同:
select setval('"Audit_auditID_seq"', 171832, true);
如果你需要找出序列,使用
\d "table_name";
如果您不知道序列名称,但您的列是 serial
(或现代 Postgres 版本中的 identity
),您可以使用:
select setval(pg_get_serial_sequence('"Audit"', 'auditID'), max("auditID"))
from "Audit";
我知道这个问题有点傻,我需要 运行 这些查询来查看值是否不同步,但我收到类似 'relation does not exist':
SELECT MAX(the_primary_key) FROM the_table;
SELECT nextval('the_primary_key_sequence');
我有一个名为 "Audit" 的 table,主键列为 'auditID'。当我 运行 第一个查询时,我得到了结果:
SELECT MAX('auditID') FROM "Audit";
max
---------
auditID
(1 row)
但最大值应大于 10000。
然后我 运行 第二个查询,我得到错误 'relation "the_primary_key_sequence" or "Audit_auditID_seq" does not exist'。 如何检查主键序列是否存在?
错误:
select setval('Audit_auditID_seq', 171832, true);
ERROR: relation "audit_auditid_seq" does not exist
LINE 1: select setval('Audit_auditID_seq', 171832, true);
我想出了我所有的问题,引号在这种情况下非常敏感;
SELECT MAX("auditID") FROM "Audit";
max
--------
171832
(1 row)
SELECT nextval('"Audit_auditID_seq"');
----
139801
最后使值相同:
select setval('"Audit_auditID_seq"', 171832, true);
如果你需要找出序列,使用
\d "table_name";
如果您不知道序列名称,但您的列是 serial
(或现代 Postgres 版本中的 identity
),您可以使用:
select setval(pg_get_serial_sequence('"Audit"', 'auditID'), max("auditID"))
from "Audit";