PostgreSQL에는 이러한 메커니즘이 없습니다.
그러나 여전히 이러한 테이블 변경으로 인한 과도한 영향을 피할 수 있습니다.
다음 명령문은 명령문 / 트랜잭션 기간 동안 테이블에 대한 액세스 독점 잠금 을 획득 합니다.
ALTER TABLE your_table
ADD COLUMN new_column integer NOT NULL DEFAULT 0;
이 명령문은 카탈로그를 변경 한 다음 새 열에 모든 행의 기본값이 포함되도록 전체 테이블을 다시 작성합니다. 테이블에 많은 행이 있고 자주 액세스되는 경우 일시적인 문제가 발생할 수 있습니다.
이를 방지하려면 독점 잠금 장치를 가능한 한 짧게 유지하십시오.
ALTER TABLE your_table
ADD COLUMN new_column integer;
ALTER TABLE your_table
ALTER COLUMN new_column SET DEFAULT 0;
이것은 기본적으로 카탈로그에 대한 (실제로 두 번) 변경 (데이터 변경은 발생하지 않음)이므로 매우 빠르게 완료됩니다. 그런 다음 필요와 테이블 사용법에 따라 한 단계 또는 일괄 적으로 새 열을 기본값으로 업데이트하고 완료되면 열을로 설정하십시오 NOT NULL
.
희망 사항에 대한 업데이트 : PostgreSQL 11에이 기능이 있습니다. 자세한 내용은 https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/ 를 참조 하십시오 .