Postgresql:表名/模式混淆

时间:2011-08-31 20:09:22

标签: sql postgresql

我在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。但它在我的情况下不起作用。什么暗示我可能搞砸了什么!?

3 个答案:

答案 0 :(得分:10)

Postgresql默认为小写字符,而对列/表名称区分大小写:

select * from public.Abc 

实际上是:

select * from public.abc

那是因为您的表名为Abc,因此无法找到。

您可以通过引号覆盖此小写字母行为,因此“Abc”将作为Abc处理。

答案 1 :(得分:6)

这是正常的,对象名称(如表和列)不区分大小写,除非您将它们放在双引号之间“。这是标准的SQL行为。

答案 2 :(得分:5)

不要相信混合案例。最好的理智是永远不要使用混合情况。 公共模式(大部分)是默认模式,可以省略。