jOOQ는 PostgreSQL과 같은 시스템에서 SQL MERGE를 지원하지 않는다는 것을 이해했습니다.PostgreSQL 조건부 삽입을위한 jOOQ MERGE 지원
시리얼 (자동 증가) "id"열과 "uri"열이있는 테이블이 있습니다. 데이터베이스의 URI 대신 숫자 ID를 사용하여 ID 조회 테이블에 URI가 있는지 확인해야합니다.
createDSLContext().mergeInto(tableByName("uris"))
.using(createDSLContext().selectOne())
.on(fieldByName("uri").equal("http://example.com/"))
.whenNotMatchedThenInsert(fieldByName("uri"))
.values("http://example.com/").execute();
이 나에게 같은 DataAccessException
말하는 것을 제공합니다 :
SQL [merge into "uris" using (select 1) on "uri" = ? when not matched then insert ("uri") values (?)]; ERROR: syntax error at or near "merge"
을하지만 로그가 jOOQ 앞서가는 말한다 및 실행을 시도 그래서 jOOQ 설명서의 예 다음, 나는이 일 것이라고 생각 바인드 값을 가지는 쿼리 그러나 테이블은 결코 업데이트되지 않습니다. 그래서 jOOQ가 PostgreSQL에서 MERGE를 시뮬레이트하지 않는다고 추측하고 있습니까?
그래서 나는 다음 H2 데이터베이스 구문을 시도 :
createDSLContext().mergeInto(tableByName("uris"), fieldByName("uri")).values(uri.toString()).execute();
를 내가 얻을 :
The H2-specific MERGE syntax is not supported in dialect : POSTGRES
무슨!? 그러나 jOOQ documentation은 H2 구문이 "SQL 표준을 지원하는 다른 모든 데이터베이스에 대해 jOOQ에 의해 완전히 시뮬레이션 될 수 있습니다."라고 말합니다. 분명히 PostgreSQL은 SQL 표준을 지원합니다. 정말로 "... MERGE의 SQL 표준 버전"을 의미합니까?
PostgreSQL에서 jOOQ를 통해 MERGE를 지원할 수있는 방법이 있습니까? 아니면 어쨌든 동일한 해결 방법을 수행하고 있습니다.