귀하의 질문에 아무런 의미가 없습니다.
DELETE FROM database_userprofile WHERE user.username = 'some';
^^^^
여기에서 user
은 어디서 왔습니까? 쿼리에서 참조되지 않습니다. 이 열은 database_userprofile
입니까? 그렇다면 user.username
을 쓸 수 없습니다 (복합 유형이 아닌 경우 파서에 알리기 위해 (user).username
을 작성해야합니다. 그러나 복합 유형이 아닌 것으로 의심됩니다).
즉각적인 원인은 user
is a reserved word입니다. 당신은 그것을 인용하지 않고 그 이름을 사용할 수 없습니다
이
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';
"user"를 큰 따옴표로 묶어 놓았 음을 알 수 있습니다. 이는 키워드이기 때문에 테이블 이름이나 다른 사용자 정의 식별자에 사용해서는 안됩니다. 큰 따옴표를 붙이면 키워드가 아닌 식별자로 해석됩니다.
* 항상 * PostgreSQL 버전과 관련된 테이블 정의를 포함합니다. 우리가 무엇을 성취하려고하는지 설명함으로써 우리는 추측 할 필요가 없습니다. 어쨌든 이번에는 위와 같은 방법으로 전권을 썼습니다. * 정확한 명령 텍스트와 오류를 포함했기 때문입니다 (감사합니다!). –