【问题标题】:How to find the the primary key sequence and the max of primary key如何找到主键序列和主键的最大值
【发布时间】:2019-02-16 10:26:12
【问题描述】:

我知道这个问题有点傻,我需要运行这些查询以查看值是否不同步,但我收到类似“关系不存在”的错误:

 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);

【问题讨论】:

标签: sql postgresql database-sequence


【解决方案1】:

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

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

Online example

【讨论】:

    【解决方案2】:

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

     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";
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多