为什么我无法在postgres中用双引号引用我的序列?

时间:2018-03-29 11:59:05

标签: sql postgresql database-sequence

我在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)

但是根据difference between single quote and double quote in sql,双引号可以与任何用户定义的sql对象一起使用。因此,my_sequence也是用户定义的对象。那么,为什么我无法访问它?

1 个答案:

答案 0 :(得分:3)

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相同,但有一个type input function,它接受​​表,索引或序列名称作为输入

因此,您可以使用表格的名称作为参数调用nextval,并且字符串由单引号括起,而不是双引号。