1

我知道这个问题有点傻,我需要运行这些查询来查看这些值是否不同步,但我得到一个错误,比如“关系不存在”:

 SELECT MAX(the_primary_key) FROM the_table;   
 SELECT nextval('the_primary_key_sequence');

我有一个名为“Audit”的表,主键列为“auditID”。当我运行第一个查询时,我得到了结果:

SELECT MAX('auditID') FROM "Audit";
   max
---------
 auditID
 (1 row)

但最大值应超过 10000。

然后我运行第二个查询,我得到错误“关系“the_primary_key_sequence”或“Audit_auditID_seq”不存在”。如何检查是否存在任何主键序列?

错误:

select setval('Audit_auditID_seq', 171832, true);
ERROR:  relation "audit_auditid_seq" does not exist
LINE 1: select setval('Audit_auditID_seq', 171832, true);
4

2 回答 2

5

我弄清楚了我所有的问题,在这种情况下引号真的很敏感;

 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";
于 2018-09-12T14:33:59.313 回答
0

如果您不知道序列名称,但您的列是 a serial(或identity在现代 Postgres 版本中),您可以使用:

select setval(pg_get_serial_sequence('"Audit"', 'auditID'), max("auditID"))
from "Audit";

在线示例

于 2021-01-15T12:55:39.013 回答