첫번째 세션을 맺고 트랜잭션 안에서 테이블 truncate 를 수행합니다.
commit 이나 rollback 수행은 하지 않았습니다. 즉, 트랜잭션 종료 전입니다.
scottdb=> create table x(x int);
scottdb=> truncate table x; -- 예전강좌에서 말씀드렸듯이 PostgreSQL 에서는 drop 과 truncate 까지 롤백가능합니다.
scottdb=> select * from x;
x
---
(0 rows)
scottdb=>
이제 두번째 세션에서 위의 x 테이블을 조회해보면 행이 발생합니다.
scottdb=> select * from x; -- 행상태
DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL, ALTER TABLE .. 이런 명령어들은
AccessExclusiveLock 을 잡기 때문에 타 세션의 동일 테이블 SELECT 문은 블럭킹을 당합니다.
이점 유념하시고 위 명령어들을 수행시에는 트랙잭션 타임을 최대한으로 줄여 수행하시기 바랍니다.
되도록이면 트랙잭션 모드에서는 수행안하는게 젤 좋겠죠 (autocommit 상태에서만 수행)