我正在尝试使用postgres并发现一个非常奇怪的事情,我使用pgadminIII创建了一个名为testtable的表,并添加了几列然后我在查询编辑器中编写了以下查询
SELECT * from testtable;
它没有回复没有找到这样名字的表格,然后我尝试了
select * from "testtable"
用引号(后一个)它工作,然后我删除了表并使用脚本编辑器创建了表,同名,确保名称周围没有引号,然后两个查询开始工作,我无法理解立场究竟是什么意思,即使我在create table语句引号中写“teablename”也不应该成为表名的一部分。
另外,如何在使用pgAdmin图形用户界面时确保所有对象都是在没有引用的情况下创建的(当然,如果因为上述问题)?
更新:环境信息
OS => Windows Server 2008 x64,Postgres => 9.0.3-2 x64,pgAdmin => > 版本1。12。2(2011年3月22日,rev:> REL-1_12_2)
答案 0 :(得分:1)
您是否第一次使用新表格对话框?您不应在对话框中使用引号,因为pgAdmin将插入所有必要的引号。
修改强> 我今天发现了一些有点奇怪的东西,可能会解释你发生了什么。
如果不引用表名,则表名称将转换为小写。所以,如果你这样做
CREATE TABLE TestTable ( ... );
您的表格将被称为testtable 当您开始查询表时会发生什么:
SELECT * FROM TestTable; -- succeeds looks for testtable
SELECT * FROM testtable; -- succeeds
SELECT * FROM "TestTable"; -- fails because case doesn't match
现在,如果你做了:
CREATE TABLE "TestTable" ( ... );
您的表实际上将被称为TestTable,并保留案例,结果为
SELECT * FROM TestTable; -- fails looks for testtable
SELECT * FROM testtable; -- fails
SELECT * FROM "TestTable"; -- succeeds