PostgreSQL 이 자동으로 잡는 lock
행 UPDATE 가 트랜잭션 끝까지 FOR UPDATE-style row lock 잡음. 다른 트랜잭션의 같은 행 두 번째 UPDATE 가 기다림. SELECT 가 row lock 안 잡음 (MVCC 처리) — SELECT ... FOR UPDATE 로 명시 요청 안 하면.
명시적 row locking
업데이트 의도로 행 읽을 때 명시 lock: SELECT ... FOR UPDATE. 두 동시 트랜잭션이 같은 값 읽고 서로 변경 덮어쓰는 'lost update' 방지.
Table-level lock
DDL (ALTER TABLE, DROP TABLE) 이 테이블에 exclusive lock — 실행 중 아무도 read/write 못 함. '스키마 마이그레이션이 프로덕션 30 초 lock 함' 의 치료가 CONCURRENTLY 변형 DDL 존재하는 곳 (CREATE INDEX CONCURRENTLY, REINDEX CONCURRENTLY 등).