为什么"setval()"失败"关系......不存在"?

Arc*_*dix 4 postgresql

如果您尝试设置如下序列号:

SELECT setval('table_ID_seq', (SELECT max("ID") + 1 FROM table));
Run Code Online (Sandbox Code Playgroud)

您可能会遇到以下错误:

ERROR:  relation "table_ID_seq" does not exist
LINE 1: SELECT setval('table_ID_seq', (SELECT max("ID") + 1 FROM t...
                      ^

********** Error **********

ERROR: relation "table_id_seq" does not exist
SQL Status:42P01
Run Code Online (Sandbox Code Playgroud)

Arc*_*dix 12

问题是PostgreSQL会标准化标识符名称,除非它们用双引号括起来.

但是,这不起作用:

SELECT setval("table_ID_seq", (SELECT max("ID") + 1 FROM table));
Run Code Online (Sandbox Code Playgroud)

相反,您必须在双引号文本周围放置单引号:

SELECT setval('"table_ID_seq"', (SELECT max("ID") + 1 FROM table));
Run Code Online (Sandbox Code Playgroud)

  • 回家吧,Postgres,你喝醉了:) (4认同)