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

PgAdmin列名查询语法新手问题:大小写与表引用困惑

PostgreSQL大小写敏感查询问题解决

问题描述

在PgAdmin中执行SQL查询时遇到错误:
执行的查询语句:

SELECT * FROM public."Sync" WHERE organizationId = "xxx";

返回错误提示:

ERROR: column "organizationid" does not exist
LINE 1: SELECT * FROM public."Sync" WHERE organizationId = "cljybe6z...
^
HINT: Perhaps you meant to reference the column "Sync.organizationId".

尝试给列名加引号或写成"Sync.organizationId"仍报错,存在两个疑问:

  1. 如何正确引用该列?
  2. 为何必须指定schema和表名public."Sync",而不能像psql中直接写sync?

问题解答

1. 正确引用列名的方法

PostgreSQL对标识符(表名、列名等)的大小写规则是:

  • 未加双引号的标识符会被自动转为小写处理
  • 加双引号的标识符会严格区分大小写

你的问题出在两个细节:

  • 列名organizationId是大小写混合的,未加双引号时会被转成organizationid,但实际表中列名是organizationId(带大写I),因此匹配失败
  • 字符串常量"xxx"用了双引号,PostgreSQL会把它当成标识符(列名)处理,而非字符串值,字符串值必须用单引号包裹

正确的查询语句应为:

SELECT * FROM public."Sync" WHERE "organizationId" = 'xxx';

如果要带上表名限定,需给表名和列名分别加双引号:

SELECT * FROM public."Sync" WHERE "Sync"."organizationId" = 'xxx';

注意:不能把Sync.organizationId整个放在双引号里,否则会被当成一个完整的列名标识符,而非表+列的组合。

2. 为何必须指定schema和带引号的表名

表名大小写的原因

PostgreSQL的标识符规则同样适用于表名:

  • 创建表时如果用了双引号(比如CREATE TABLE "Sync"...),表名会保留大小写,查询时必须用双引号包裹才能识别
  • 创建表时未加双引号(比如CREATE TABLE sync...),查询时写sync或Sync都可以,因为会被自动转成小写匹配

schema指定的原因

  • psql中可能默认的搜索路径(search_path)包含public,所以直接写表名就能找到对应表
  • PgAdmin中如果当前会话的搜索路径未包含public,或者默认schema不是public,就必须指定public.来限定schema;另外,当表名是大小写混合且带双引号时,即使schema在搜索路径里,也需要确保表名引用准确,否则可能因大小写问题找不到表,因此通常会带上schema明确指定

你可以执行以下语句查看当前搜索路径:

SHOW search_path;

如果要临时将public加入默认搜索路径,执行:

SET search_path TO public;

该设置仅对当前会话有效。


内容的提问来源于stack exchange,提问作者Xen_mar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:06:08