Postgres Alter Table关系不存在

时间:2015-08-11 22:47:49

标签: python postgresql psycopg2 quoted-identifier

我有一张名为Foo的表,我试图添加一个列" bar"至。在python中使用psycopg2,我的函数调用是

cursor.execute('ALTER TABLE "Foo" ADD COLUMN bar text')

但是,我收到以下错误:

relation "Foo" does not exist

我也试过把模式" public"在它无济于事之前。我究竟做错了什么?感谢。

编辑:

CraigRinger的命令\dt *.?oo屈服于No matching relations found

\dt *.foo\dt *.Foo都产生了以下输出:

     List of relations
Schema |Name|Type |Owner
-------+----+-----+--------
public |foo |table|postgres

1 个答案:

答案 0 :(得分:0)

您的表名为foo,而不是Foo。如果您使用引用的名称"Foo",那么postgres会将其区分大小写,因此无法找到它。

Postgres将所有未引用的名称视为小写,Foofoo相同,FOO"foo"也是如此{{1}不一样。

documentation

中明确提到了这一点
  

引用标识符也会使其区分大小写,而不带引号的名称始终折叠为小写。例如,PostgreSQL认为标识符FOO,foo和“foo”是相同的,但是“Foo”和“FOO”与这三个和彼此不同。 (在PostgreSQL中将不带引号的名称折叠为小写与SQL标准不兼容,后者表示不带引号的名称应折叠成大写。因此,根据标准,foo应相当于“FOO”而不是“foo”。如果如果您想编写便携式应用程序,建议您始终引用特定名称或从不引用它。)