Permintaan Anda tidak masuk akal.
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
Di mana user
berasal dari? Itu tidak dirujuk dalam kueri. Apakah ini kolom database_userprofile
? Jika demikian, Anda tidak dapat menulis user.username
(kecuali jika itu adalah tipe komposit, dalam hal ini Anda harus menulis (user).username
untuk memberitahu parser bahwa; tapi saya ragu itu tipe komposit).
Penyebab langsungnya adalah user
adalah kata khusus
. Anda tidak dapat menggunakan nama itu tanpa mengutipnya:
DELETE FROM database_userprofile WHERE "user".username = 'some';
... namun, kueri ini tetap tidak masuk akal, hanya akan memberikan kesalahan yang berbeda:
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...
Tebakan liar saya adalah Anda mencoba melakukan penghapusan melalui gabungan. Saya berasumsi bahwa Anda memiliki tabel seperti:
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
);
dan Anda mencoba menghapus dengan kondisi di tabel lain.
Jika demikian, Anda tidak bisa cukup tulis user.username
. Anda harus menggunakan:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';
Anda akan melihat bahwa saya telah mengutip dua kali "pengguna". Itu karena itu adalah kata kunci dan tidak boleh benar-benar digunakan untuk nama tabel atau pengidentifikasi yang ditentukan pengguna lainnya. Mengutip dua kali memaksanya untuk ditafsirkan sebagai pengenal bukan kata kunci.