SQLの列名が引用されない限り、大文字と小文字を区別しない、標準の識別子は大文字が、PostgreSQL normalizes to lower caseに正規化されるべきであると述べていますPostgreSQLはemail
について文句を言っています:
column "email" does not exist
あなたの引用符なしのEmail
は、PostgreSQLが識別子を小文字に正規化するため、email
と扱われています。
create table "bans" (
"Email" varchar(...)
...
)
または移行で列を識別するために:Email
を使用して:あなたは、二重にそれらを引用することによって大文字の名前で列を作成したような音。あなたはそれが作成された列名を引用した場合、それは下部ケース(またはSQL標準の場合は大文字)に正規化されていない、あなたはそれを引用倍にする必要があり、永遠ケースと一致します:
SELECT "bans".* FROM "bans" WHERE ("Email"='' ...
Email
を修正すると、IP
,Username
,Reason
およびLength
と同じ問題が発生します。それらを参照するすべてのSQLでは、それらをすべて二重引用符で囲む必要があります。
小文字の列名とテーブル名を使用することをお勧めします。これにより、常に引用文を心配する必要はありません。小文字の列名を使用するようにテーブルを修正することをお勧めします。余談として
、あなたの'NULL'
文字列リテラル:
SELECT "bans".* FROM "bans" WHERE (Email='' AND IP='' AND (Username='NULL'))
-- -------------------->------------------>---------->---------------^^^^^^
は奇妙に見える、あなたが"Username" is null
を意味していないことを確信していますか? 'NULL'
文字列リテラルとNULL値は全く異なるもので、=
または!=
を使用してNULLと比較することはできません.is null
, is not null
, is distinct from
, or is not distinct from
(意図に応じて)NULLを使用する必要があります。
大文字小文字を区別するカラム名を持つポストグルを使用していますか? –
SQLとテーブルではケースはまったく同じです – nekosune
ええ、それは1つの場所にありますそれは欠けていると言われています。 –