我有一张名为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
答案 0 :(得分:0)
您的表名为foo
,而不是Foo
。如果您使用引用的名称"Foo"
,那么postgres会将其区分大小写,因此无法找到它。
Postgres将所有未引用的名称视为小写,Foo
与foo
相同,FOO
和"foo"
也是如此{{1}不一样。
引用标识符也会使其区分大小写,而不带引号的名称始终折叠为小写。例如,PostgreSQL认为标识符FOO,foo和“foo”是相同的,但是“Foo”和“FOO”与这三个和彼此不同。 (在PostgreSQL中将不带引号的名称折叠为小写与SQL标准不兼容,后者表示不带引号的名称应折叠成大写。因此,根据标准,foo应相当于“FOO”而不是“foo”。如果如果您想编写便携式应用程序,建议您始终引用特定名称或从不引用它。)