-- [SQL-9-2-4-a] A 세션
-- A 세션
-- A 세션 pid 확인(3248)
SELECT pg_backend_pid();
-- 1. 명시적 트랜잭션 시작
BEGIN;
-- 3. ACC1 잔액 변경
UPDATE startdbpg.ms_acc t1
SET bal_amt = bal_amt-500
WHERE t1.acc_no = 'ACC1';
-- 5. 변경된 데이터 반영
COMMIT;
SQL
복사
-- [SQL-9-2-4-a] B 세션
-- B 세션
-- B 세션 pid 확인(3249)
SELECT pg_backend_pid();
-- 2. 명시적 트랜잭션 시작
BEGIN;
-- 4. ACC1 잔액 변경(WAIT)
UPDATE startdbpg.ms_acc t1
SET bal_amt = bal_amt-500
WHERE t1.acc_no = 'ACC1';
-- 6. 변경된 데이터 반영
COMMIT;
SQL
복사
-- [SQL-9-2-4-a] C 세션
-- C 세션(모니터링 세션)
-- 5. 세션 상태 확인
SELECT t1.pid
,t1.wait_event_type
,t1.state
,pg_blocking_pids(t1.pid) AS blk_by
FROM pg_stat_activity t1
WHERE pg_blocking_pids(t1.pid) != '{}';
-- 6. 블록커 세션 확인
-- 5번에서 확인한 blk_by를 pid 조건으로
SELECT t1.pid
,t1.wait_event_type
,t1.state
,pg_blocking_pids(t1.pid) AS blk_by
FROM pg_stat_activity t1
WHERE t1.pid = 3248;
SQL
복사

