Postgres查询包含驼峰命名的序列

3
我想在我的表中设置一个序列。因此,我列出了所有的序列:
SELECT c.relname 
FROM pg_class c 
WHERE c.relkind = 'S';

这给了我一个例如:tableName_id_seq 的东西。

当我尝试使用以下方法设置序列时:

SELECT setval("tableName_id_seq", (SELECT MAX(id) from "tableName"));

I get:

ERROR:  relation "tableName_id_seq" does not exist
LINE 1: SELECT setval('tableName_id_seq', (SELECT MAX(id) from "t...

我已经尝试使用单引号和双引号。有人知道在这里该怎么做吗?


你不能使用pgadmin吗? - Juan Carlos Oropeza
2
避免使用带引号的标识符是一个好习惯,这是另一个很好的例子。select('"tableName_id_seq"', ...) 应该可以工作。 - user330315
1个回答

8

避免使用驼峰命名法来创建标识符。它让工作变得非常无聊:

CREATE SEQUENCE "CamelCaseSeq";
SELECT nextval(format('%I', 'CamelCaseSeq'));
SELECT setval(format('%I', 'CamelCaseSeq'), 6666);
SELECT currval(format('%I', 'CamelCaseSeq'));
SELECT * FROM "CamelCaseSeq";

以下是来自文档的引述:

引用标识符还会使其区分大小写,而未加引号的名称则总是折叠为小写。例如,在 PostgreSQL 中,标识符 FOO、foo 和 "foo" 被视为相同,但 "Foo" 和 "FOO" 则与这三个及彼此不同。

更多信息可在此处此处查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接