현재 log_statment 조회:
psql에서(아무 db에서)
> SHOW log_statement;
==> 보통은 이것만 세팅하면 됨.
(이거 세팅 하면 log_min_duration_statement값에 상관없이 다 찍힘)
🔹 pgaudit 없이 “누가 어떤 query 실행했는지” 남기는 log_statement 최소 세팅
핵심은 두 가지야:
- 쿼리를 로그로 남기고(log_statement / log_min_duration_statement)
- 로그에 유저명을 찍게 만드는 것(log_line_prefix)
1) RDS 파라미터 그룹에서 바꿀 것
RDS > Parameter groups에서 해당 Postgres 파라미터 그룹 편집해서 대략 이렇게:
-- 필수
log_statement = 'none' -- 또는 'mod' / 'ddl' / 'all' 중 선택
log_min_duration_statement = 0 -- 또는 N ms (느린 쿼리만)
-- 유저/DB 정보 찍기 위해
log_line_prefix = '%t [%p] %u %d %h '
- %u : 유저명 (누가)
- %d : DB명
- %h : 클라이언트 호스트(IP)
- %t : 시간
- %p : 프로세스 ID
“정말 다 보고 싶다”면
log_statement = 'all'
log_min_duration_statement = -1
→ 모든 쿼리가 “유저 + 쿼리 내용” 형태로 CloudWatch/로그에 다 찍힘.
(트래픽 많으면 로그 엄청 늘어나는 건 주의!)
“쓰기류만 보고 싶다”면 (실무에서 많이 씀)
log_statement = 'mod' -- INSERT/UPDATE/DELETE만
log_min_duration_statement = -1
→ SELECT는 안 찍고, 데이터 변경 쿼리만 유저와 함께 기록.
🔹 그럼 로그는 어떻게 생기냐?
설정이 잘 되면 RDS 로그/CloudWatch에 이런 식으로 찍혀:
2025-12-04 10:23:45 [12345] appuser mydb 10.0.0.12 LOG: statement: SELECT * FROM orders WHERE id = 1;
2025-12-04 10:24:01 [12346] admin mydb 10.0.0.13 LOG: statement: UPDATE users SET ...;
이 한 줄만으로:
- 누가(appuser/admin)
- 어느 DB에서(mydb)
- 어디서(10.0.0.12)
- 어떤 SQL을(SELECT/UPDATE …)
까지 다 파악 가능.
🔹 pgaudit vs 기본 로그 비교
항목 기본 로그 (log_statement 등) pgaudit
| 설정 난이도 | 비교적 간단 | 조금 더 복잡 (확장 설치/설정) |
| 볼 수 있는 내용 | 쿼리 텍스트 + 유저 | 쿼리 + 권한/객체 단위 Audit 정보 |
| 용도 | “누가 어떤 SQL 날렸냐” 수준 | 컴플라이언스/보안 감사용(정교한 audit) |
지금 말한 것처럼
“누가 어떤 query를 날렸는지만”
알고 싶은 거라면 기본 로그 설정만으로 충분하고, 훨씬 간단해.
🔚 요약
- 정말 간단하게 하고 싶다 → pgaudit 말고 log_statement + log_line_prefix로 해결
- 최소 세팅 예:
- RDS 파라미터 그룹 변경 후, 인스턴스 Reboot 한 번 해주면 적용됨.
log_line_prefix = '%t [%p] %u %d %h '
log_statement = 'all' -- or 'mod'
log_min_duration_statement = -1
원하면
- “운영 서비스에 최소 영향만 주는 추천값”
- “CloudWatch에서 해당 유저만 필터링해서 보는 법” 은 추가 필요.
[변경방법]
1. 데이터베이스 선택 후 아래->구성 탭에서 확인하고
2. 데이터베이스 수정을 눌러 아래 그림에서 파라미터 변경하면 됨.
3. 그 후에 rds instance REBOOT: (1~2분 서비스 중단) 이 필요함.




