postgresql
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePostgreSQL Administration
PostgreSQL 管理
Installation & Setup
安装与配置
bash
undefinedbash
undefinedOn Linux (Ubuntu/Debian)
On Linux (Ubuntu/Debian)
sudo apt-get install postgresql postgresql-contrib
sudo apt-get install postgresql postgresql-contrib
On macOS
On macOS
brew install postgresql@15
brew install postgresql@15
Docker installation
Docker installation
docker run --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:15
docker run --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:15
Start and enable PostgreSQL
Start and enable PostgreSQL
sudo systemctl start postgresql
sudo systemctl enable postgresql
undefinedsudo systemctl start postgresql
sudo systemctl enable postgresql
undefinedConnection Basics
连接基础
bash
undefinedbash
undefinedConnect to default database
Connect to default database
psql -U postgres
psql -U postgres
Connect to specific database
Connect to specific database
psql -U postgres -d mydb -h localhost -p 5432
psql -U postgres -d mydb -h localhost -p 5432
List databases
List databases
\l
\l
List tables in current database
List tables in current database
\dt
\dt
Get table info
Get table info
\d table_name
\d table_name
Quit psql
Quit psql
\q
undefined\q
undefinedUser & Role Management
用户与角色管理
sql
-- Create a new role
CREATE ROLE developer WITH LOGIN PASSWORD 'secure_password';
-- Create superuser role
CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin_password';
-- Grant privileges on database
GRANT CONNECT ON DATABASE mydb TO developer;
-- Grant privileges on schema
GRANT USAGE ON SCHEMA public TO developer;
-- Grant privileges on tables
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO developer;
-- Grant privileges on specific table
GRANT SELECT ON employees TO developer;
-- Make role a database owner
ALTER DATABASE mydb OWNER TO developer;
-- Revoke privileges
REVOKE INSERT, UPDATE ON employees FROM developer;
-- Drop role
DROP ROLE developer;sql
-- Create a new role
CREATE ROLE developer WITH LOGIN PASSWORD 'secure_password';
-- Create superuser role
CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin_password';
-- Grant privileges on database
GRANT CONNECT ON DATABASE mydb TO developer;
-- Grant privileges on schema
GRANT USAGE ON SCHEMA public TO developer;
-- Grant privileges on tables
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO developer;
-- Grant privileges on specific table
GRANT SELECT ON employees TO developer;
-- Make role a database owner
ALTER DATABASE mydb OWNER TO developer;
-- Revoke privileges
REVOKE INSERT, UPDATE ON employees FROM developer;
-- Drop role
DROP ROLE developer;Configuration & Tuning
配置与调优
bash
undefinedbash
undefinedPostgreSQL configuration file
PostgreSQL configuration file
sudo nano /etc/postgresql/15/main/postgresql.conf
sudo nano /etc/postgresql/15/main/postgresql.conf
Key configuration parameters:
Key configuration parameters:
Memory
Memory
shared_buffers = 256MB # 25% of RAM for dedicated server
effective_cache_size = 1GB # 50-75% of RAM
work_mem = 64MB # RAM per operation
shared_buffers = 256MB # 25% of RAM for dedicated server
effective_cache_size = 1GB # 50-75% of RAM
work_mem = 64MB # RAM per operation
Connections
Connections
max_connections = 200
superuser_reserved_connections = 3
max_connections = 200
superuser_reserved_connections = 3
Write-Ahead Log
Write-Ahead Log
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64
Query planning
Query planning
random_page_cost = 1.1 # For SSD
log_min_duration_statement = 1000 # Log slow queries
undefinedrandom_page_cost = 1.1 # For SSD
log_min_duration_statement = 1000 # Log slow queries
undefinedBackup & Recovery
备份与恢复
bash
undefinedbash
undefinedFull database backup (text format)
Full database backup (text format)
pg_dump -U postgres -d mydb -f mydb_backup.sql
pg_dump -U postgres -d mydb -f mydb_backup.sql
Binary backup (faster, compressed)
Binary backup (faster, compressed)
pg_dump -U postgres -d mydb -Fc -f mydb_backup.dump
pg_dump -U postgres -d mydb -Fc -f mydb_backup.dump
Backup specific table
Backup specific table
pg_dump -U postgres -d mydb -t employees -f employees_backup.sql
pg_dump -U postgres -d mydb -t employees -f employees_backup.sql
Backup all databases
Backup all databases
pg_dumpall -U postgres -f all_databases.sql
pg_dumpall -U postgres -f all_databases.sql
Restore from backup
Restore from backup
psql -U postgres -d mydb -f mydb_backup.sql
psql -U postgres -d mydb -f mydb_backup.sql
Restore from binary dump
Restore from binary dump
pg_restore -U postgres -d mydb mydb_backup.dump
undefinedpg_restore -U postgres -d mydb mydb_backup.dump
undefinedMaintenance Operations
维护操作
sql
-- VACUUM (reclaim space)
VACUUM; -- Full vacuum
-- VACUUM ANALYZE (reclaim space & update stats)
VACUUM ANALYZE;
-- ANALYZE (update table statistics)
ANALYZE;
-- Check database integrity
REINDEX DATABASE mydb;
-- Show database size
SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database;
-- Show table sizes
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename))
FROM pg_tables
WHERE schemaname != 'pg_catalog'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;sql
-- VACUUM (reclaim space)
VACUUM; -- Full vacuum
-- VACUUM ANALYZE (reclaim space & update stats)
VACUUM ANALYZE;
-- ANALYZE (update table statistics)
ANALYZE;
-- Check database integrity
REINDEX DATABASE mydb;
-- Show database size
SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname))
FROM pg_database;
-- Show table sizes
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename))
FROM pg_tables
WHERE schemaname != 'pg_catalog'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;Monitoring
监控
sql
-- Active connections
SELECT * FROM pg_stat_activity WHERE state != 'idle';
-- Database statistics
SELECT * FROM pg_stat_database WHERE datname = 'mydb';
-- Table statistics
SELECT * FROM pg_stat_user_tables;
-- Index statistics
SELECT * FROM pg_stat_user_indexes;
-- Cache hit ratio
SELECT
sum(heap_blks_read) as heap_read,
sum(heap_blks_hit) as heap_hit,
sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM pg_statio_user_tables;sql
-- Active connections
SELECT * FROM pg_stat_activity WHERE state != 'idle';
-- Database statistics
SELECT * FROM pg_stat_database WHERE datname = 'mydb';
-- Table statistics
SELECT * FROM pg_stat_user_tables;
-- Index statistics
SELECT * FROM pg_stat_user_indexes;
-- Cache hit ratio
SELECT
sum(heap_blks_read) as heap_read,
sum(heap_blks_hit) as heap_hit,
sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM pg_statio_user_tables;Performance Tuning
性能调优
sql
-- Check slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC LIMIT 10;
-- Find unused indexes
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;
-- Find missing indexes
SELECT * FROM pg_stat_user_tables
WHERE seq_scan > idx_scan
AND n_live_tup > 1000;
-- Analyze query plan
EXPLAIN ANALYZE
SELECT * FROM employees WHERE salary > 50000;sql
-- Check slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC LIMIT 10;
-- Find unused indexes
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;
-- Find missing indexes
SELECT * FROM pg_stat_user_tables
WHERE seq_scan > idx_scan
AND n_live_tup > 1000;
-- Analyze query plan
EXPLAIN ANALYZE
SELECT * FROM employees WHERE salary > 50000;Replication Setup
复制配置
bash
undefinedbash
undefinedOn primary server - enable replication in postgresql.conf
On primary server - enable replication in postgresql.conf
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64
Create replication user
Create replication user
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'rep_password';
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'rep_password';
On standby - base backup from primary
On standby - base backup from primary
pg_basebackup -h primary_host -D /var/lib/postgresql/15/main -U replicator -v -P -W
pg_basebackup -h primary_host -D /var/lib/postgresql/15/main -U replicator -v -P -W
Create recovery.conf on standby
Create recovery.conf on standby
standby_mode = 'on'
primary_conninfo = 'host=primary_host port=5432 user=replicator password=password'
undefinedstandby_mode = 'on'
primary_conninfo = 'host=primary_host port=5432 user=replicator password=password'
undefinedHigh Availability with pgBouncer
基于pgBouncer的高可用
bash
undefinedbash
undefinedInstall pgBouncer
Install pgBouncer
sudo apt-get install pgbouncer
sudo apt-get install pgbouncer
Configuration - /etc/pgbouncer/pgbouncer.ini
Configuration - /etc/pgbouncer/pgbouncer.ini
[databases]
mydb = host=primary_host port=5432 dbname=mydb
[pgbouncer]
listen_port = 6432
max_client_conn = 1000
default_pool_size = 25
reserve_pool_size = 5
undefined[databases]
mydb = host=primary_host port=5432 dbname=mydb
[pgbouncer]
listen_port = 6432
max_client_conn = 1000
default_pool_size = 25
reserve_pool_size = 5
undefinedNext Steps
后续步骤
Learn advanced security features including row-level security and SSL/TLS configuration in the skill.
postgresql-security学习高级安全功能,包括行级安全和SSL/TLS配置,请查看技能。
postgresql-security