重置序列(区分大小写)

Resetting a sequence (case sensitive)

我尝试将序列 (test_Id_seq) 设置为这样的新值(注意序列名称中的大写字母 'I'):

SELECT setval(public."test_Id_seq", (select max("Id") from public.test_events), true);

我收到这个错误:

ERROR: missing FROM-clause entry for table "public" LINE 1: SELECT setval(public."test_events_Id_seq", (select max("Id... ^ ********** Error **********

ERROR: missing FROM-clause entry for table "public" SQL-Status: 42P01

我尝试了括号的不同位置,但没有其他结果。

如何设置序列值? select max() 本身工作正常。

字面量应该用单引号括起来,试试:

SELECT setval('public."test_Id_seq"', (select max("Id") from public.test_events), true);

另一种在代码中更方便使用并且对我有用的方法是

SELECT setval('"test_Id_seq"'::text, (select max("Id") from test_events), true);

该字符串被双引号括起来,因此它通过解析器保持大小写不变。