あなたの質問は意味がありません。
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
user
はどこにありますか から来る?クエリでは参照されていません。 database_userprofile
の列ですか ?その場合、user.username
を記述できません。 (複合型でない限り、その場合は(user).username
を記述する必要があります。 パーサーにそのことを伝えるため。しかし、それが複合型だとは思えません。
直接の原因は、user
です。 予約語です
。引用せずにその名前を使用することはできません:
DELETE FROM database_userprofile WHERE "user".username = 'some';
...ただし、このクエリはまだ意味がなく、別のエラーが発生するだけです:
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...
私の大げさな推測は、あなたが結合に対して削除を行おうとしているということです。次のようなテーブルがあると思います:
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
);
そして、他のテーブル全体の条件で削除しようとしています。
もしそうなら、あなたはできません user.username
と書くだけです 。使用する必要があります:
DELETE FROM database_userprofile
USING "user"
WHERE database_userprofile.user_id = "user".id
AND "user".username = 'fred';
「ユーザー」を二重に引用していることに気付くでしょう。これはキーワードであり、テーブル名やその他のユーザー定義の識別子には実際には使用しないでください。二重引用符で囲むと、キーワードではなく識別子として解釈されます。