attach-partition
warningATTACH PARTITION
Why it's unsafe
ATTACH PARTITION takes an ACCESS EXCLUSIVE lock on the table being attached and scans it to validate the partition bound (the parent stays available under SHARE UPDATE EXCLUSIVE), so the table being attached is unavailable for the scan's duration.
Safe rewrite
Add a CHECK constraint on the child matching the partition bound and validate it separately first (ADD CONSTRAINT ... CHECK (...) NOT VALID, then VALIDATE CONSTRAINT); ATTACH then skips the scan and the lock is brief.
Example
Try it in the playground →Unsafe
ALTER TABLE measurement ATTACH PARTITION measurement_y2021
FOR VALUES FROM ('2021-01-01') TO ('2022-01-01');Safe
-- add a matching, validated CHECK first so ATTACH can skip the scan
ALTER TABLE measurement_y2021
ADD CONSTRAINT measurement_y2021_bound
CHECK (logdate >= '2021-01-01' AND logdate < '2022-01-01') NOT VALID;
ALTER TABLE measurement_y2021 VALIDATE CONSTRAINT measurement_y2021_bound;
ALTER TABLE measurement ATTACH PARTITION measurement_y2021
FOR VALUES FROM ('2021-01-01') TO ('2022-01-01');