sql >> Base de Datos >  >> RDS >> PostgreSQL

DELETE FROM ... informando de un error de sintaxis en o cerca de .

Tu consulta no tiene ningún sentido.

DELETE FROM database_userprofile WHERE user.username = 'some';
                                       ^^^^

¿Dónde está el user? ¿viene de? No está referenciado en la consulta. ¿Es una columna de database_userprofile? ? Si es así, no puede escribir user.username (a menos que sea un tipo compuesto, en cuyo caso tendría que escribir (user).username decirle al analizador que; pero dudo que sea un tipo compuesto).

La causa inmediata es que user es una palabra reservada . No puede usar ese nombre sin citarlo:

DELETE FROM database_userprofile WHERE "user".username = 'some';

... sin embargo, esta consulta aún no tiene sentido, solo dará un error 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...

Mi suposición descabellada es que estás tratando de hacer una eliminación sobre una unión. Supongo que tienes tablas 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
);

y está intentando eliminar con una condición en la otra tabla.

Si es así, no puedes solo escribe user.username . Debe utilizar:

DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';

Notarás que he escrito "usuario" entre comillas dobles. Esto se debe a que es una palabra clave y en realidad no debería usarse para nombres de tablas u otros identificadores definidos por el usuario. Las comillas dobles obligan a que se interprete como un identificador, no como una palabra clave.