Warning Configuration

Excessive Statement Logging

Every SQL statement is being logged, creating massive log files and significant I/O overhead.

What is this issue?

The log_statement setting controls which SQL statements are logged:

- none: No statements logged (use log_min_duration_statement)
- ddl: Only DDL statements (CREATE, ALTER, DROP)
- mod: DDL + data-modifying statements (INSERT, UPDATE, DELETE)
- all: Every single statement

With log_statement = all:
- Every SELECT is logged (potentially millions per hour)
- Log files grow gigabytes per day
- I/O overhead can be 10-30% of throughput
- Sensitive data may appear in logs

Why it matters

Performance Impact

10-30% throughput reduction from logging I/O

Disk Space

Logs grow rapidly, potentially filling disk

Security Risk

Query parameters may contain sensitive data

Log Noise

Important messages buried in millions of statements

How PG Pilot detects it

```sql
SELECT name, setting
FROM pg_settings
WHERE name = 'log_statement';
```

How to fix it

1

Use targeted logging instead

Log slow queries instead of all queries:

ALTER SYSTEM SET log_statement = 'ddl';
ALTER SYSTEM SET log_min_duration_statement = '100ms';
SELECT pg_reload_conf();
2

Consider what you need

Choose the right level:
- ddl: Schema changes only (safest)
- mod: Data modifications (for audit trails)
- Use log_min_duration_statement for slow query analysis

3

Use pg_stat_statements

For query analysis, use pg_stat_statements instead:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

This aggregates statistics without logging every query.

Prevention

  • Never use log_statement = 'all' in production
  • Use log_min_duration_statement for slow query analysis
  • Use pg_stat_statements for query statistics
  • Reserve verbose logging for debugging specific issues

Related Issues

Related Features

PostgreSQL Documentation