(uuid) 및 (text)의 tag
두 열 이있는 테이블 이 있습니다. 이제 테이블에 새 태그를 삽입하고 싶지만 태그가 이미 존재 하는 경우 기존 레코드 를 가져오고 싶습니다 .id
name
id
나는 다음 ON CONFLICT DO NOTHING
과 함께 사용할 수 있다고 가정 했다 RETURNING "id"
.
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
그러나 이름이 "foo"인 태그가 이미 존재하면 빈 결과 집합이 반환됩니다.
그런 다음 noop DO UPDATE
절 을 사용하도록 쿼리를 변경했습니다 .
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
의도 된대로 작동하지만 이름을 이미 기존 값으로 설정하기 때문에 다소 혼란 스럽습니다.
이것이이 문제를 해결하는 방법입니까, 아니면 내가 놓친 간단한 접근법이 있습니까?
@a_horse_with_no_name
—
Der Hochstapler
ERROR: missing FROM-clause entry for table "excluded"
사용하면 그냥 나에게 준다 DO NOTHING
.
returning excluded.id
했습니까?