PostgreSQL은 "INSERT ... ON CONFLICT UPDATE
"구조를 가지고 있지만, 대부분의 경우 내 쿼리에서 UPDATE가 필요합니다.PostgreSQL : 업데이트 ... 누락 삽입물에?
그래서 DB가 삽입을 시도한 다음 업데이트 만 시도하고 싶습니다. 시도 할 것이고 UPDATE
이고 레코드가 존재하지 않는다면 - INSERT
이됩니다.
가능합니까? 성능이 향상됩니까?
PostgreSQL은 "INSERT ... ON CONFLICT UPDATE
"구조를 가지고 있지만, 대부분의 경우 내 쿼리에서 UPDATE가 필요합니다.PostgreSQL : 업데이트 ... 누락 삽입물에?
그래서 DB가 삽입을 시도한 다음 업데이트 만 시도하고 싶습니다. 시도 할 것이고 UPDATE
이고 레코드가 존재하지 않는다면 - INSERT
이됩니다.
가능합니까? 성능이 향상됩니까?
성능이 향상되며 사용 코드에 따라 달라집니다. 테이블을 구성한 다음 별도의 함수를 사용하여 추가 할 데이터가 있는지 여부를 확인한 다음 적절하게 수행하십시오 (존재하는 경우 insert else no). 이 경우 코드가 메모리의 일부를 차지합니다.
함수없이 단일 SQL 문으로 수행 할 수 있습니까? –
네, 물론입니다. Where 문으로 삽입하는 동안이 작업을 수행 할 수 있습니다. 예를 들어 이것을보십시오 : –
INSERT INTO hundred(name, name_slug, status)
SELECT DISTINCT name, name_slug, status
FROM hundred
WHERE NOT EXISTS (
SELECT 'X'
FROM temp_data
WHERE temp_data.name = hundred.name AND temp_data.name_slug = hundred.name_slug AND temp_data.status = status);
단순화하기 memmory 심지어 작은 부분을 절약하기 위해 대량의 데이터로 작업 할 때이 방법이 좋다 "여기서"문은 당신이 원하는 것을 할 수있는 키 포인트입니다 :
INSERT INTO table (id, field, field2)
SELECT 3, 'C', 'Z'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
그게 당신이 의미하는 것입니까, @Pavel Bernshtam –
죄송 합니다만, 나는 당신의보기에서 내가 어디서 업데이트를하는지 모르겠습니까? 먼저 테이블을 업데이트하려고합니다. –
UPDATE 테이블 (ID, field, field2) SET ID = 3, 필드 = 'C', field2 = 'Z' WHERE NOT EXISTS (SELECT 1 FROM table WHERE id = 3); –
은 무엇 그걸로 얻을 것으로 기대합니까? –
내 상황에서 성공할 가능성이 큰 첫 번째 업데이트를 시도 할 것이기 때문에 성능이 향상 될 것으로 예상합니다. –
행의 수가 0이면 INSERT .. ON CONFLICT UPDATE를 수행 할 수 있습니다. 실제 데이터와 방법을 비교하여 속도가 빠른지 확인하십시오. –