매우 큰 목록을 반복하는 PostgreSQL 저장 프로 시저가 있으며 UPDATE
을 사용하여 일부 구성원을 변경합니다.COMMIT in PostgreSQL 저장 프로 시저
반복 실행마다 변경 사항을 커밋 할 수 있습니까? 함수 실행이 끝날 때가 아닙니다. 그것은 내가 짧은 시간 동안 함수를 실행할 수있게 할 것이고, 각각의 실행마다 작은 변화를 만들 수있을 것이다.
감사합니다,
아담
매우 큰 목록을 반복하는 PostgreSQL 저장 프로 시저가 있으며 UPDATE
을 사용하여 일부 구성원을 변경합니다.COMMIT in PostgreSQL 저장 프로 시저
반복 실행마다 변경 사항을 커밋 할 수 있습니까? 함수 실행이 끝날 때가 아닙니다. 그것은 내가 짧은 시간 동안 함수를 실행할 수있게 할 것이고, 각각의 실행마다 작은 변화를 만들 수있을 것이다.
감사합니다,
아담
아니, 현재 아니, 저장 프로 시저 내부를 열거 나 닫으 거래하는 지원 아니에요.
각 반복 후에 커밋하면 btw가 훨씬 느려질 것입니다. 적어도 10,000 또는 100,000 건의 업데이트를 배치해야합니다. 그리고 주석에서 말했듯이 진정한 승리는 물론 ISAM 스타일을 실행하지 않고 단일 쿼리로 작성하는 방법을 찾아내는 것입니다. 이 문 당 비용이, 그래서 당신이 덜 문을 수행하기 위해 기능을 쓸 수 있다면, 당신은 더 낫다
고마워, 아마 내 접근 방식을 바꿀거야. –
...
FOR all IN (select * from TABLE1)
LOOP
FOR some IN (select * from)
LOOP
INSERT INTO TABLE2 VALUES (all.id, some.id)
END LOOP
END LOOP
이 하나의 INSERT 문으로 전체 루프를 교체 :
INSERT INTO TABLE2 SELECT all.id, some.id FROM all, some WHERE...
업데이트 할 목록의 크기는주의하십시오. 우리는 비슷한 문제를 안고있었습니다. 테이블을 동적으로 만들고 많은 데이터를 삽입해야했습니다. 먼저 월 및 연도 목록에 대해 저장 프로 시저 및 루프를 만들고 매월 단일 테이블을 만들지 만 단일 저장 프로 시저에서 축소합니다. 그래서 우리는 저장 프로 시저를 생성하지만 거기에서 반복하지는 않습니다. 대신 저장 프로 시저 외부에서 반복되고 작동합니다.
실제 성능 최적화는 '커서'또는 일부 다른 방법을 통해 전체 목록을 반복하지 않고 단일 '업데이트'문을 사용하는 것입니다. 이 시나리오에서 가능하지 않습니까? – yfeldblum
아마도이 질문에 대해 궁금합니다. –