PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

DELETE FROM ... relatando erro de sintaxe em ou próximo a .


Sua consulta não faz sentido.
DELETE FROM database_userprofile WHERE user.username = 'some';
                                       ^^^^

Onde user vem de onde? Ele não é referenciado na consulta. É uma coluna de database_userprofile ? Nesse caso, você não pode escrever user.username (a menos que seja um tipo composto, nesse caso você teria que escrever (user).username para dizer ao analisador que; mas duvido que seja um tipo composto).

A causa imediata é que user é uma palavra reservada . Você não pode usar esse nome sem citá-lo:
DELETE FROM database_userprofile WHERE "user".username = 'some';

... no entanto, essa consulta ainda não faz sentido, apenas dará um erro diferente:
regress=> DELETE FROM database_userprofile WHERE "user".username = 'some';
ERROR:  missing FROM-clause entry for table "user"
LINE 1: DELETE FROM database_userprofile WHERE "user".username = 'so...

Meu palpite é que você está tentando fazer uma exclusão sobre uma junção. Estou assumindo que você tem tabelas como:
CREATE TABLE "user" (
    id serial primary key,
    username text not null,
    -- blah blah
);

CREATE TABLE database_userprofile (
     user_id integer references "user"(id),
     -- blah blah
);

e você está tentando excluir com uma condição na outra tabela.

Se sim, você não pode basta escrever user.username . Você deve usar:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';

Você notará que coloquei "usuário" entre aspas. Isso porque é uma palavra-chave e não deve ser usada para nomes de tabelas ou outros identificadores definidos pelo usuário. Aspas duplas o forçam a ser interpretado como um identificador e não uma palavra-chave.