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

Postgresqlの奇妙な動作

    update_tbl_point 関数はおそらく次のようなことをしています:

    new.last_update = current_timestamp;
    

    ただし、new."Last_Update"を使用する必要があります トリガー機能を修正してください。

    PostgreSQLでは列名は小文字に正規化されますが(SQL標準では逆になります)、二重引用符で囲まれた識別子は大文字と小文字を区別します:

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

    したがって、これを行う場合:

    create table pancakes (
        Eggs integer not null
    )
    

    次に、これらのいずれかを実行できます:

    update pancakes set eggs = 11;
    update pancakes set Eggs = 11;
    update pancakes set EGGS = 11;
    

    3つのフォームすべてがeggsに正規化されているため、機能します 。ただし、これを行う場合:

    create table pancakes (
        "Eggs" integer not null
    )
    

    次に、これを行うことができます:

    update pancakes set "Eggs" = 11;
    

    しかしこれではありません:

    update pancakes set eggs = 11;
    

    PostgreSQLの通常の方法は、どこでも小文字の識別子を使用することです。これにより、心配する必要がなくなります。他のデータベースでも同じ命名スキームをお勧めします。すべてを引用する必要があると、SQLに二重引用符(標準)、バッククォート(MySQL)、角かっこ(SQL Server)が散らかってしまいます。友達になりましょう。




    1. PgBouncer1.6の新機能

    2. 動的列の行への転置

    3. Perlを使用してMySQLに接続する方法

    4. SQLCMDを使用してSQLデータベースのメンテナンスタスクを自動化する方法