PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ELIMINA DA ... segnalando un errore di sintassi in corrispondenza o in prossimità di .

La tua domanda non ha alcun senso.

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

Dove si trova user vieni da? Non è referenziato nella query. È una colonna di database_userprofile ? In tal caso, non puoi scrivere user.username (a meno che non sia un tipo composito, nel qual caso dovresti scrivere (user).username dire al parser che; ma dubito che sia un tipo composito).

La causa immediata è che user è una parola riservata . Non puoi usare quel nome senza citarlo:

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

... tuttavia, questa query non ha ancora senso, darà solo un errore diverso:

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...

La mia ipotesi folle è che stai cercando di eseguire un'eliminazione su un join. Presumo che tu abbia tabelle come:

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 stai cercando di eseguire l'eliminazione con una condizione nell'altra tabella.

Se è così, non puoi scrivi semplicemente user.username . Devi usare:

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

Noterai che ho doppiato "utente" tra virgolette. Questo perché è una parola chiave e non dovrebbe essere utilizzata per nomi di tabelle o altri identificatori definiti dall'utente. La doppia virgoletta costringe a interpretarlo come un identificatore e non come una parola chiave.