1

我有一个名为 Foo 的表,我正在尝试向其中添加一列“bar”。在 python 中使用 psycopg2,我的函数调用是

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

但是,我收到以下错误:

relation "Foo" does not exist

我还尝试将架构“公开”放在它之前无济于事。我究竟做错了什么?谢谢。

编辑:

CraigRinger 的命令\dt *.?oo产生了No matching relations found

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

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

1 回答 1

0

你的表是命名foo的,不是Foo。如果您使用带引号的名称"Foo",则 postgres 将其视为区分大小写,因此不会找到它。

Postgres 将所有未引用的名称视为小写,即Foofoo, as areFOO和相同"foo",但"Foo"不一样。

这在文档中明确提到:

引用标识符也使其区分大小写,而未引用的名称总是折叠为小写。例如,标识符 FOO、foo 和“foo”在 PostgreSQL 中被认为是相同的,但“Foo”和“FOO”与这三个不同并且彼此不同。(在 PostgreSQL 中将不带引号的名称折叠为小写与 SQL 标准不兼容,SQL 标准说不带引号的名称应该折叠为大写。因此,根据标准, foo 应该等效于 "FOO" 而不是 "foo"。如果您想编写可移植的应用程序,建议您始终引用特定名称或永远不要引用它。)

于 2015-08-12T13:53:15.963 回答