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.