ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PostgreSQL] LOCK TABLE table_name IN A
    Postgresql / PPAS/Lock 2015. 1. 28. 16:42

    기본적인 사용법은 다음과 같다.

    BEGIN WORK;
    LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE;
    SELECT * FROM table_name WHERE id=10;
    Update table_name SET field1=test WHERE id=10;
    COMMIT WORK;


    ACCESS SHARE

    ACCESS EXCLUSIVE 락 모드와 충돌이 난다. SELECT 와 ANALYZE 명령어가 사용될때 이 잠금 모드가 사용된다. 일반적으로 오직 읽기를 수행하거나, 갱신이 없는 명령어를 수행할때는 이 모드를 획득한다고 보면 된다.

    ROW SHARE

    EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. SELECT FOR UPDATE 명령시에 타겟이 되는 테이블에 이 잠금 모드가 설정된다.

    ROW EXCLUSIVE

    SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. UPDATE, DELETE, INSERT 명령어가 수행될때 타겟 테이블에 이 잠금 모드가 설정된다. 일반적으로 테이블의 데이터를 갱신하는 명령어들이 수행될 때 이 모드가 설정된다고 생각하면 된다.

    SHARE UPDATE EXCLUSIVE

    SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. 이 모드는 동시에 테이블 스키마의 변경이나, VACUUM (FULL 제외) 실행시에 설정되며 테이블을 보호해준다.

    SHARE

    ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. 동시에 테이블의 데이터가 변경되지 않도록 테이블을 보호한다. CREATE INDEX 명령 수행시 설정되는 모드이다.

    SHARE ROW EXCLUSIVE

    ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. 이 모드는 PostgreSQL 명령어로는 자동적으로 설정되지 않는다. 즉 사용자가 명시적으로 선언하여야 한다.

    EXCLUSIVE

    ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE 모드와 충돌이 난다. 이 모드는 동시에 ACCESS SHARE 잠금만 허용하도록 한다. 바꾸어 말하면, 이 모드에서는 오직 읽기 트랜잭션만 동시에 수행 될 수 있다는 뜻이다. SHARE ROW EXCLUSIVE 모드와 마찬가지로 PostgreSQL 명령어로는 자동설정 되지 않고, 명시적으로 잠금을 설정하여야 한다.

    ACCESS EXCLUSIVE

    ACCESS EXCLUSIVE 모드를 포함하여 모든 잠금 모드와 충돌이 난다. 가장 엄격한 잠금 모드로서 이 모드로 잠금이 설정되어 동작중인 트랜잭션만 테이블에 접근을 할 수 있다. ALTER TABLE, DROP TABLE, REINDEX, CLUSTER, VACUUM FULL 명령어 수행시 설정된다. 만약 명시적 잠금을 사용하기 위해 LOCK 명령을 사용할 경우 아무런 옵션도 주지 않고 실행 한다면 기본적으로 이 모드가 설정된다는 것을 알아 두자.



Designed by Tistory.