불행히도 일부 무거운 bytea
유형 필드를 포함하여 고객 데이터 (~ 500K 고객)가 포함 된 테이블이있는 postgresql 9.2 설치가 있습니다.Postgresql : update 명령이 중지되지 않습니다.
CUSTOMERS1 | id | first name | last name | ...
----------------------------------------------------- ...
c1005 ... ... ...
데이터를 외부 소스와 병합하는 작업이 있습니다. 불행히도 정확히 동일한 외래 키를 사용하지는 않습니다.
CUSTOMERS2 | id | first name | last name | ...
----------------------------------------------------- ...
101005 ... ... ...
그래서 customers1
가 customers2
의 ID c1005
있는 동안 동일한 이드 즉 c
단지 드롭되고 100000
이드에 첨가하고, 101005
이다.
이제 customers2
에있는 것과 동일한 ID를 포함하는 customers2_id
에 customers1
열을 추가하려고합니다. 나는 다음과 같은 SQL 명령과 함께 올라와있다 : 나는 영원히 걸리는 명령을 실행할 때
ALTER TABLE customers1 ADD COLUMN customers2_id numeric(15,0);
UPDATE customers1
SET customers2_id = to_number(trim(leading 'c' from id), '9999') + 100000;
불행하게도 (우리가> 15시간와 아직도 완성을 위해 실행하자). 또한 포스트 그레스 프로세스는 유휴 상태 인 것 같습니다 (활동 모니터에 따라).
일부 노트 : 우리는 예를 들어, 함께 UPDATE
명령을 실행하는 인덱스
WHERE id = 'c1005'
은 WHERE 절에서 ~ 10 개의 요소까지 빠르게 실행되며 20 개의 요소가 속도가 크게 저하됨- 이 실험을 통해이 작업을 빠르게 수행 할 수 있음을 알 수있었습니다 :
INSERT INTO
새 테이블을 작성하고 select 문을 삽입 한 값으로 지정했습니다.SELECT id, to_number(trim(leading 'c' from id), '9999') + 100000 FROM customers2
; 그것은 우리가 bytea와 필드
우리가 어떻게 일을 속도와이 문제를 해결할 수있는 주요 문제가 있다는 인상을 < 십초
대개 'ALTER TABLE'은이 테이블의 일부 작업에 의해 차단됩니다. –
@IgorRomanchenko : 의심 스럽습니다. 교착 상태가 발생하면 결국 쿼리가 오류를 일으 킵니다. –