1

列「バー」を追加しようとしているFooというテーブルがあります。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 は、引用符で囲まれていないすべての名前を小文字であるかのように扱います。つまり、 や と同じですFooが、同じでfooFOOありません。"foo""Foo"

これはドキュメントで明示的に言及されています:

識別子を引用すると、大文字と小文字が区別されますが、引用符で囲まれていない名前は常に小文字に変換されます。たとえば、識別子 FOO、foo、および "foo" は PostgreSQL では同じと見なされますが、"Foo" と "FOO" はこれら 3 つとは異なり、互いに異なります。(PostgreSQL で引用符で囲まれていない名前を小文字に変換することは、引用符で囲まれていない名前を大文字に変換する必要があるという SQL 標準と互換性がありません。したがって、標準によれば、foo は "foo" ではなく "FOO" と同等である必要があります。移植可能なアプリケーションを作成したい場合は、常に特定の名前を引用するか、決して引用しないことをお勧めします。)

于 2015-08-12T13:53:15.963 に答える