Navicat中Postgres查询加引号仍报语法错误怎么办
报错原因
这个语法错误和表名是否加双引号没有关联,核心问题是PostgreSQL的CTE(公用表表达式)语法规则不允许仅定义CTE而不执行后续操作。
你写的语句只完成了CTE t1 的定义,WITH子句本身不能作为独立SQL语句执行,它必须依附于后续的主查询或数据操作语句存在,无论表名引号是否正确,单独运行这段代码都会触发语法报错。
修复方案
在CTE定义的末尾补充对应的查询或数据操作语句即可,最基础的用法是直接查询CTE的结果集,修正后的示例代码:
WITH t1 AS ( SELECT * FROM "olympics_history" ) SELECT * FROM t1;
补充说明
- 如果你的
olympics_history表本身就是全小写命名,不需要额外给表名加双引号。PostgreSQL默认会将未加双引号的标识符自动转为小写处理,只有当标识符包含大写字母、特殊字符,或者和SQL关键字重名时,才需要用双引号包裹做精确匹配。 - CTE后除了接SELECT查询,也可以对接INSERT、UPDATE、DELETE等数据操作语句,例:
WITH t1 AS ( SELECT * FROM olympics_history WHERE year = 2016 ) INSERT INTO olympics_history_2016 SELECT * FROM t1;
内容的提问来源于stack exchange,提问作者Usman
相关产品推荐
相关产品推荐

