sql >> データベース >  >> RDS >> PostgreSQL

Psycopg2は、小文字で始まるテーブル名を好みません

    他の答えに追加すると、識別子(テーブル名と列名)の大文字と小文字の区別に関するPostresqlの動作は次のとおりです:

    • 名前が引用符で囲まれていない場合は、小文字に変換されます 。それ以外の場合は、そのままにしておきます。
    • その後、大文字と小文字を区別する一致 試行されます。

    これは、クエリだけでなく、スキーマ操作にも当てはまります。特に:テーブルの作成。

    黄金律は一貫性です:

    ポータブルアプリケーションを作成する場合は、常に特定の名前を引用するか、絶対に引用しないことをお勧めします

    投稿された問題は、おそらくテーブルと列の名前が作成時に引用されていたために発生しました(したがって、それらは小文字に変換されませんでした)。したがって、すべてのクエリで引用符で囲む(大文字と小文字を区別する)必要があります。

    通常、すべてが期待どおりに機能します。

    db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
    CREATE TABLE
    db=# select * from xXx;    -- this works ok
    id
    ----
    (0 rows)
    db=# create table "Xxxx" (id integer);  -- will be left untouched
    CREATE TABLE
    db=# select * from xxxx;                -- bad
    ERROR:  relation "xxxx" does not exist
    LINE 1: select * from xxxx;
    db=# select * from Xxxx;                -- bad
    ERROR:  relation "xxxx" does not exist
    LINE 1: select * from Xxxx;
    ^
    db=# select * from "Xxxx";               -- ok
    id
    ----
    (0 rows)
    
    db=# \dt *xx*
    List of relations
    Schema | Name | Type  |  Owner
    --------+------+-------+----------
    public | Xxxx | table | postgres
    public | xxx  | table | postgres
    


    1. 非推奨のoracle.sql.ArrayDescriptor、oracle.sql.STRUCT、およびoracle.sql.StructDescriptorを修正する方法

    2. SQLiteのパフォーマンスチューニング

    3. PostgreSQL-結果セットを返すストアドプロシージャに動的SQLを記述します

    4. AndroidStudioのRoomデータベースを使用したテーブルの関連付け