You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在PostgreSQL中无法使用双引号引用序列?

解决PostgreSQL中nextval使用双引号报错的问题

你遇到的问题本质是PostgreSQL对标识符引用和字符串常量的处理规则差异导致的,咱们来具体拆解:

你的操作重现

首先你成功创建了序列:

create sequence my_sequence start 5 minvalue 3 increment 1 cycle;

但使用双引号查询序列值时触发错误:

select nextval("my_sequence");

报错内容:

ERROR: column "my_sequence" does not exist
LINE 1: select nextval("my_sequence");

改用单引号包裹序列名则正常运行:

select nextval('my_sequence');

问题核心原因

在PostgreSQL的语法规则里:

  • 双引号(") 是用来引用数据库标识符(比如表名、列名、序列名这类对象名称)的。当你写nextval("my_sequence")时,PostgreSQL会把"my_sequence"解析成一个列名去查找,自然找不到对应列,所以报错。
  • 单引号(') 是用来定义字符串常量的。nextval()函数需要接收的是序列名称(类型为regclass,字符串会自动转换为该类型),用单引号包裹后,PostgreSQL能正确识别这是要调用的序列对象。

额外注意点

如果你的序列名包含特殊字符、大写字母(PostgreSQL默认会把未加双引号的标识符转为小写),此时需要用双引号来保持标识符的原样,但要把双引号也放进单引号里传递给nextval,比如:

-- 创建带大写的序列
create sequence "My_Sequence" start 1 increment 1;
-- 正确调用方式
select nextval('"My_Sequence"');

内容的提问来源于stack exchange,提问作者Mangu Singh Rajpurohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:50:20