Os nomes das colunas SQL não diferenciam maiúsculas de minúsculas, a menos que sejam citados, o padrão diz que os identificadores devem ser normalizados para maiúsculas, mas o PostgreSQL normaliza para minúsculas:
A citação de um identificador também diferencia maiúsculas de minúsculas, enquanto os nomes sem aspas são sempre dobrados para letras minúsculas. Por exemplo, os identificadoresFOO,foo, e"foo"são considerados iguais pelo PostgreSQL, mas"Foo"e"FOO"são diferentes destes três e entre si. (A dobragem de nomes sem aspas para letras minúsculas no PostgreSQL é incompatível com o padrão SQL, que diz que nomes sem aspas devem ser dobrados para maiúsculas. Assim,foodeve ser equivalente a"FOO"não"foo"de acordo com o padrão. Se você deseja escrever aplicativos portáteis, é aconselhável sempre citar um nome específico ou nunca citá-lo.)
Você está fazendo referência a
Email em seu SQL:SELECT "bans".* FROM "bans" WHERE (Email='' ...
mas o PostgreSQL está reclamando do
email :column "email" does not exist
Seu
Email não citado está sendo tratado como email porque o PostgreSQL normaliza os identificadores para letras minúsculas. Parece que você criou as colunas com nomes em maiúsculas citando-as duas vezes:create table "bans" (
"Email" varchar(...)
...
)
ou usando
:Email para identificar a coluna em uma migração. Se você citar um nome de coluna quando ele for criado, ele não será normalizado para minúsculas (ou maiúsculas no caso padrão do SQL) e você terá que aspas duplas e corresponder às maiúsculas para sempre:SELECT "bans".* FROM "bans" WHERE ("Email"='' ...
Depois de corrigir
Email , você terá o mesmo problema com IP , Username , Reason e Length :você terá que colocar aspas duplas em qualquer SQL que faça referência a eles. A melhor prática é usar nomes de colunas e tabelas em letras minúsculas para que você não precise se preocupar em citar coisas o tempo todo. Eu recomendo que você corrija sua tabela para ter nomes de coluna em letras minúsculas.
Como um aparte, seu
'NULL' literal de string:SELECT "bans".* FROM "bans" WHERE (Email='' AND IP='' AND (Username='NULL' ))
-- -------------------->------------------>---------->---------------^^^^^^
parece estranho, você tem certeza que não quer dizer que
"Username" is null ? O 'NULL' string literal e o valor NULL são coisas totalmente diferentes e você não pode usar = ou != para comparar as coisas com NULL, você deve usar is null , is not null , is distinct from , ou is not distinct from (dependendo da sua intenção) quando NULLs podem estar em jogo.