간단한 commit 테스트를 위한 test 테이블 생성과 트랜잭션 테스트입니다.
-- 간단한 테스트 테이블 생성
CREATE TABLE test_table (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
created_at TIMESTAMP DEFAULT NOW()
);
-- 트랜잭션 시작
BEGIN;
-- 데이터 삽입
INSERT INTO test_table (name) VALUES ('test1');
INSERT INTO test_table (name) VALUES ('test2');
-- 데이터 확인 (트랜잭션 내에서)
SELECT * FROM test_table;
-- COMMIT 테스트
COMMIT;
-- 커밋 후 확인
SELECT * FROM test_table;
-- 트랜잭션 시작
BEGIN;
-- 데이터 삽입
INSERT INTO test_table (name) VALUES ('test3');
-- 현재 상태 확인
SELECT * FROM test_table;
-- 롤백
ROLLBACK;
-- 롤백 후 확인 (test3는 없어야 함)
SELECT * FROM test_table;
-- 시작 시간 확인
\timing on
BEGIN;
INSERT INTO test_table (name) VALUES ('timing_test');
-- COMMIT 시간 측정
COMMIT;
-- 타이밍 끄기
\timing off
-- 대량 데이터로 COMMIT 성능 테스트
BEGIN;
-- 1000개 레코드 삽입
INSERT INTO test_table (name)
SELECT 'bulk_test_' || generate_series(1, 1000);
-- COMMIT (시간이 오래 걸릴 수 있음)
COMMIT;
-- 결과 확인
SELECT COUNT(*) FROM test_table;
-- 다른 세션에서 실행하여 트랜잭션 상태 확인
SELECT
pid,
state,
query_start,
xact_start,
query
FROM pg_stat_activity
WHERE datname = current_database()
AND pid != pg_backend_pid();
-- 연속 트랜잭션 테스트
DO $$
BEGIN
FOR i IN 1..10 LOOP
BEGIN
INSERT INTO test_table (name) VALUES ('stress_test_' || i);
COMMIT;
END;
END LOOP;
END $$;
-- 전체 데이터 확인
SELECT name, COUNT(*)
FROM test_table
GROUP BY name
ORDER BY name;
-- 테이블 크기 확인
SELECT pg_size_pretty(pg_total_relation_size('test_table')) as table_size;
-- 테스트 완료 후 테이블 삭제
DROP TABLE test_table;
-- 한 번에 실행 가능한 간단 테스트
CREATE TABLE IF NOT EXISTS quick_test (id SERIAL, data TEXT);
BEGIN; INSERT INTO quick_test (data) VALUES ('test'); COMMIT;
SELECT * FROM quick_test;
DROP TABLE quick_test;
이 테스트들로 현재 PostgreSQL의 COMMIT 동작이 정상인지 확인할 수 있습니다. 특히 \timing on을 사용하면 COMMIT에 걸리는 시간을 측정할 수 있어서 성능 문제 진단에 도움이 됩니다.