네, PostgreSQL에서 특정 데이터베이스에 대한 최근 쿼리를 확인하는 여러 방법이 있습니다.
-- 특정 데이터베이스의 활성 세션
SELECT
pid,
usename,
datname,
application_name,
client_addr,
query_start,
state,
query
FROM pg_stat_activity
WHERE datname = 'your_database_name'
AND query != '<IDLE>';
먼저 확장 기능이 설치되어 있는지 확인:
-- 확장 기능 설치 확인
SELECT * FROM pg_extension WHERE extname = 'pg_stat_statements';
-- 설치되지 않았다면
CREATE EXTENSION pg_stat_statements;
최근 쿼리 통계 조회:
-- 가장 최근 실행된 쿼리들 (호출 횟수 순)
SELECT
query,
calls,
total_exec_time,
mean_exec_time,
last_exec,
queryid
FROM pg_stat_statements
ORDER BY last_exec DESC
LIMIT 20;
-- 특정 패턴 검색
SELECT
query,
calls,
total_exec_time,
last_exec
FROM pg_stat_statements
WHERE query ILIKE '%table_name%'
ORDER BY last_exec DESC;
SELECT
s.query,
s.calls,
s.last_exec,
r.rolname as username
FROM pg_stat_statements s
JOIN pg_authid r ON s.userid = r.oid
WHERE r.rolname = 'specific_username'
ORDER BY s.last_exec DESC;
PostgreSQL 설정에서 쿼리 로깅이 활성화되어 있다면:
-- 현재 로그 설정 확인
SHOW log_statement;
SHOW log_min_duration_statement;
-- 5초마다 새로운 쿼리 모니터링
SELECT
now() as check_time,
pid,
usename,
datname,
query_start,
state,
left(query, 100) as query_preview
FROM pg_stat_activity
WHERE datname = 'your_database_name'
AND state = 'active'
AND query NOT LIKE '%pg_stat_activity%';
pg_stat_statements 확장을 활성화하는 것이 쿼리 히스토리 추적에 가장 효과적입니다.