为什么我不能在 postgres 中用双引号引用我的序列?
Why I am not able to refer to my sequence with double quotes in postgres?
我已经在 postgres 中创建了序列。
postgres=# create sequence my_sequence start 5 minvalue 3 increment 1 cycle;
CREATE SEQUENCE
现在我正在尝试查询序列中的下一个值。
postgres=# select nextval("my_sequence");
ERROR: column "my_sequence" does not exist
LINE 1: select nextval("my_sequence");
但是它给我错误,那个序列不存在。但是,当我在 sequence_name 中使用单引号时,它工作正常:-
postgres=# select nextval('my_sequence');
nextval
---------
5
(1 row)
但根据 ,双引号可用于任何用户定义的 sql 对象。因此,相应地 my_sequence 也是用户定义的对象。那么,为什么我无法访问它?
TL;DR: 使用单引号,如
SELECT nextval('my_sequence');
nextval
的参数不是标识符,但类型为 regclass
:
\df nextval
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+---------+------------------+---------------------+--------
pg_catalog | nextval | bigint | regclass | normal
(1 row)
regclass
是一种便利类型,在内部与无符号 4 字节对象标识符类型 oid
相同,但具有接受 table 的 type input function,索引或序列名称作为输入。
所以你可以用 table 的 name 作为参数调用 nextval
,字符串用单引号而不是双引号括起来。
我已经在 postgres 中创建了序列。
postgres=# create sequence my_sequence start 5 minvalue 3 increment 1 cycle;
CREATE SEQUENCE
现在我正在尝试查询序列中的下一个值。
postgres=# select nextval("my_sequence");
ERROR: column "my_sequence" does not exist
LINE 1: select nextval("my_sequence");
但是它给我错误,那个序列不存在。但是,当我在 sequence_name 中使用单引号时,它工作正常:-
postgres=# select nextval('my_sequence');
nextval
---------
5
(1 row)
但根据
TL;DR: 使用单引号,如
SELECT nextval('my_sequence');
nextval
的参数不是标识符,但类型为 regclass
:
\df nextval
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+---------+------------------+---------------------+--------
pg_catalog | nextval | bigint | regclass | normal
(1 row)
regclass
是一种便利类型,在内部与无符号 4 字节对象标识符类型 oid
相同,但具有接受 table 的 type input function,索引或序列名称作为输入。
所以你可以用 table 的 name 作为参数调用 nextval
,字符串用单引号而不是双引号括起来。