Twoje zapytanie nie ma sensu.
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
Gdzie user
pochodzić z? Nie występuje w zapytaniu. Czy jest to kolumna database_userprofile
? ? Jeśli tak, nie możesz napisać user.username
(chyba że jest to typ złożony, w takim przypadku musiałbyś napisać (user).username
powiedzieć parserowi, że; ale wątpię, że jest to typ złożony).
Bezpośrednią przyczyną jest to, że user
jest słowem zarezerwowanym
. Nie możesz użyć tej nazwy bez jej cytowania:
DELETE FROM database_userprofile WHERE "user".username = 'some';
... jednak to zapytanie nadal nie ma sensu, po prostu da inny błąd:
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...
Domyślam się, że próbujesz usunąć sprzężenie. Zakładam, że masz tabele takie jak:
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
);
i próbujesz usunąć z warunkiem w drugiej tabeli.
Jeśli tak, nie możesz po prostu napisz user.username
. Musisz użyć:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';
Zauważysz, że umieściłem w podwójnym cudzysłowie słowo „użytkownik”. Dzieje się tak, ponieważ jest to słowo kluczowe i tak naprawdę nie powinno być używane do nazw tabel ani innych identyfikatorów zdefiniowanych przez użytkownika. Podwójny cudzysłów wymusza jego interpretację jako identyfikator, a nie słowo kluczowe.