Configuration Parameters
PostgreSQL configuration parameters (GUCs) for pg_ttl_index.
Parameters Overview
| Parameter | Type | Default | Restart Required | Description |
|---|---|---|---|---|
pg_ttl_index.naptime | integer | 60 | No | Cleanup interval in seconds |
pg_ttl_index.enabled | boolean | true | No | Enable/disable background worker |
pg_ttl_index.naptime
Controls how often the background worker runs cleanup operations.
Details
- Type: Integer
- Unit: Seconds
- Default:
60 - Min:
1 - Max:
3600(1 hour) - Context:
SIGHUP(reload configuration)
Usage
-- View current setting
SHOW pg_ttl_index.naptime;
-- Change to 30 seconds
ALTER SYSTEM SET pg_ttl_index.naptime = 30;
SELECT pg_reload_conf();
-- Or in postgresql.conf
-- pg_ttl_index.naptime = 30
Recommendations
| Use Case | Recommended Value | Reason |
|---|---|---|
| High-volume cleanup | 30 | More frequent cleanup prevents backlog |
| Normal workload | 60 | Default, balances frequency and overhead |
| Low-volume tables | 120-300 | Less frequent checks reduce overhead |
| Development/testing | 10-20 | Faster feedback during testing |
Performance Impact
- Lower values = More frequent cleanup = Higher CPU usage
- Higher values = Less frequent cleanup = Potential data buildup
pg_ttl_index.enabled
Globally enables or disables the background worker.
Details
- Type: Boolean
- Default:
true - Context:
SIGHUP(reload configuration)
Usage
-- View current setting
SHOW pg_ttl_index.enabled;
-- Disable background worker
ALTER SYSTEM SET pg_ttl_index.enabled = false;
SELECT pg_reload_conf();
-- Re-enable
ALTER SYSTEM SET pg_ttl_index.enabled = true;
SELECT pg_reload_conf();
Use Cases
Disable during maintenance:
-- Before heavy operations
ALTER SYSTEM SET pg_ttl_index.enabled = false;
SELECT pg_reload_conf();
-- Perform maintenance
-- ...
-- Re-enable
ALTER SYSTEM SET pg_ttl_index.enabled = true;
SELECT pg_reload_conf();
Temporarily stop all cleanup:
-- Alternative to stopping worker
ALTER SYSTEM SET pg_ttl_index.enabled = false;
SELECT pg_reload_conf();
shared_preload_libraries
pg_ttl_index must be in shared_preload_libraries to function.
Configuration
Edit postgresql.conf:
shared_preload_libraries = 'pg_ttl_index'
Multiple extensions:
shared_preload_libraries = 'pg_stat_statements,pg_ttl_index'
Verification
-- Check if extension is preloaded
SHOW shared_preload_libraries;
-- Should include: 'pg_ttl_index'
Note: Requires PostgreSQL restart to take effect.
Viewing All Settings
Show All pg_ttl_index Parameters
SELECT
name,
setting,
unit,
context,
short_desc
FROM pg_settings
WHERE name LIKE 'pg_ttl_index%';
Example Output:
name | setting | unit | context | short_desc
-----------------------+---------+-------+---------+----------------------------------
pg_ttl_index.enabled | on | | sighup | Enable TTL background worker
pg_ttl_index.naptime | 60 | s | sighup | Cleanup interval in seconds
Configuration File Management
Using ALTER SYSTEM
-- Change settings (preferred method)
ALTER SYSTEM SET pg_ttl_index.naptime = 45;
ALTER SYSTEM SET pg_ttl_index.enabled = true;
-- Reload configuration
SELECT pg_reload_conf();
-- Verify changes
SHOW pg_ttl_index.naptime;
This modifies postgresql.auto.conf automatically.
Using postgresql.conf
Edit the main configuration file:
sudo nano /etc/postgresql/16/main/postgresql.conf
Add or modify:
# TTL Extension Configuration
shared_preload_libraries = 'pg_ttl_index'
pg_ttl_index.naptime = 60
pg_ttl_index.enabled = true
Reload:
sudo systemctl reload postgresql
# or
SELECT pg_reload_conf();
Reload vs Restart
| Change | Requires Restart? | Command |
|---|---|---|
shared_preload_libraries | Yes | systemctl restart postgresql |
pg_ttl_index.naptime | No | SELECT pg_reload_conf(); |
pg_ttl_index.enabled | No | SELECT pg_reload_conf(); |
Configuration Best Practices
Production Settings
# Production recommended settings
pg_ttl_index.naptime = 60 # Standard cleanup interval
pg_ttl_index.enabled = true # Always enabled
Development Settings
# Development/testing settings
pg_ttl_index.naptime = 10 # Faster feedback during testing
pg_ttl_index.enabled = true
High-Load Systems
# High-volume deletion workloads
pg_ttl_index.naptime = 30 # More frequent cleanup
pg_ttl_index.enabled = true
Low-Priority Cleanup
# When cleanup is low priority
pg_ttl_index.naptime = 300 # 5-minute interval
pg_ttl_index.enabled = true
Troubleshooting Configuration
Settings Not Taking Effect
Problem: Changed naptime but worker still uses old value.
Solution:
-- Reload configuration
SELECT pg_reload_conf();
-- Verify new value
SHOW pg_ttl_index.naptime;
-- Restart worker to pick up changes
SELECT ttl_stop_worker();
SELECT ttl_start_worker();
Worker Not Starting
Problem: Worker doesn't start even with correct configuration.
Check:
-- 1. Verify extension is preloaded
SHOW shared_preload_libraries;
-- 2. Check if enabled
SHOW pg_ttl_index.enabled;
-- 3. Look for errors in PostgreSQL logs
-- tail -f /var/log/postgresql/postgresql-*.log
-- 4. Try manual start
SELECT ttl_start_worker();
Permission Denied on ALTER SYSTEM
Problem: ERROR: permission denied to set parameter
Solution:
-- Must be superuser or have pg_write_server_files role
\du
-- Or edit postgresql.conf directly (requires OS access)
Monitoring Configuration Changes
Track Configuration History
-- View current configuration
SELECT name, setting, source, sourcefile, sourceline
FROM pg_settings
WHERE name LIKE 'pg_ttl_index%';
Log Configuration on Startup
Add to postgresql.conf:
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
log_connections = on
log_disconnections = on
Then check logs for extension loading messages.
Related Documentation
- Functions API -
ttl_start_worker(),ttl_stop_worker() - Monitoring - Track worker activity
- Performance Tuning - Optimize cleanup intervals