我在postgresql数据库的公共模式中创建了一个表Abc
。根据文档public
应该是默认架构。 search_path
按预期设置为"$user",public
。但是以下失败了:
select * from Abc
此调用也失败了:
select * from public.Abc
两者都产生错误,表示relation ... does not exist
。但这个工作正常:
select * from public."Abc"
我是一名经验丰富的T-SQL开发人员,但对postgresql不熟悉。根据文档,应该可以使用postgresql的“普通”SQL。但它在我的情况下不起作用。什么暗示我可能搞砸了什么!?
答案 0 :(得分:10)
Postgresql默认为小写字符,而对列/表名称区分大小写:
select * from public.Abc
实际上是:
select * from public.abc
那是因为您的表名为Abc,因此无法找到。
您可以通过引号覆盖此小写字母行为,因此“Abc”将作为Abc处理。
答案 1 :(得分:6)
这是正常的,对象名称(如表和列)不区分大小写,除非您将它们放在双引号之间“。这是标准的SQL行为。
答案 2 :(得分:5)
不要相信混合案例。最好的理智是永远不要使用混合情况。 公共模式(大部分)是默认模式,可以省略。