PostgreSQL查询时表名必须加双引号吗?public前缀代表什么
PostgreSQL相关问题解答
1. 表名前public前缀的含义
PostgreSQL中的public是数据库默认的模式(Schema),本质是数据库对象的命名空间,用于分类隔离表、视图、函数等不同对象:
- 默认配置下,所有未手动指定模式的新建对象,都会自动归属到
public模式下 - PostgreSQL中表的完整寻址规则为
[模式名].[表名],如果会话参数search_path中包含public(默认配置已包含),写SQL时可以直接省略public.前缀。
2. 表名外侧双引号的规则
双引号不是所有场景的强制要求,仅当表名满足以下任意一个条件时才需要添加:
- 建表时通过双引号指定了大小写敏感的名称
- 表名包含空格、特殊符号
- 表名和SQL内置关键字重名
PostgreSQL默认对未加双引号的标识符做自动小写转换:你执行SELECT * FROM Example时,PostgreSQL会自动将表名转换为example进行匹配,自然找不到你创建的大小写为Example的表,因此报错。如果查询时给Example加上双引号,PostgreSQL会严格按照你输入的大小写匹配表名,就能正常查询。
你熟悉的MySQL默认对表名大小写不敏感(具体规则和操作系统、数据库配置有关),没有类似的自动小写转换逻辑,因此不带引号的
Example可以正常匹配到对应表。
内容的提问来源于stack exchange,提问作者AndreaNobili
相关产品推荐
相关产品推荐

