目录
[1. 登录与元命令基础](#1. 登录与元命令基础)
[2. 数据库操作45](#2. 数据库操作45)
[1. 数据表操作](#1. 数据表操作)
[2. 模式(Sc21hema)管理](#2. 模式(Sc21hema)管理)
[1. 增删改查](#1. 增删改查)
[2. 备份与恢复31(SQL 转储为主)](#2. 备份与恢复31(SQL 转储为主))
[1. 远程连接配置](#1. 远程连接配置)
[2. 密码重置流4142程](#2. 密码重置流4142程)
[1. 用户与角色管理](#1. 用户与角色管理)
[2. 权限管理](#2. 权限管理)
[1. 表空间基础](#1. 表空间基础)
[2. 表空间应用](#2. 表空间应用)
[1. 系统监控](#1. 系统监控)
[2. 性能调优](#2. 性能调优)
[1. 流复制(物理复制)](#1. 流复制(物理复制))
[2. 逻辑复制](#2. 逻辑复制)
[1. 常见故障处理](#1. 常见故障处理)
[2. 灾难恢复](#2. 灾难恢复)
[1. 定期维护脚本](#1. 定期维护脚本)
[2. 监控告警配置](#2. 监控告警配置)
一、基础操作与数据库管理
1. 登录与元命令基础
登录方式 :使用 postgres
用户登录,命令提示符为 postgres=#
,示例:su - postgres
后执行 psql
。
元命令特性 :以12 \
开头,类似 MySQL 的 SHOW
语句,用于快速管理数据库,如 \l
列出所有数据库,\q
退出 psql
。
2. 数据库操作45
- 列出数据库 :
\l
:简洁列出数据库。\l+
:扩展显3示,包含大小、表空间等信息。- SQL 查询:
S{insert\_element\_3\_}ELECT datname FROM pg_database;
,pg_database
是系统表,存储数据库元信息。
- *创建 / 删除数据库 89*:
- 创建:
CREATE DATABASE mydb;
。 - 删除:
DROP {insert\_element\_5\_}DATABASE mydb;
。
- 创建:
- 切换与查看大小 11:
- 切换:
\c mydb
。 - 大小查询:
SEL{insert\_element\_7\_}ECT pg_database_size('mydb');
(字节)或pg_size_pretty(pg_database_size('mydb'));
(易读格式)。
- 切换:
二、数据表与模式管1314理
1. 数据表操作
- 列出表 :
\dt
:列出当前模式下的表(默认public
)。\d+
:显示表15、视图和序列详情。- SQL 查询:
S{insert\_element\_10\_}ELECT * FROM pg_tables WHERE schemaname='public';
,pg_tables
是逻辑视图。
- 创建与复制表 :1718
- 标准创建:
CREATE TABLE test (id int, name char(10), age int);
。 - 复制表结构与数据:19
CREATE TABLE new_table AS TABLE table_name;
。
- 标准创建:
- 查看表结构 :
{insert\_element\_13\_}\d test
显示字段类型与约束。
2. 模式(Sc21hema)管理
- 作用:逻辑容器,类似文件夹,用于组织数据库对象,避免命名冲突。
- 核心操作 :
22 - 创建:CREATE SCHEMA hr;
。- 删除:
DROP {insert\_element\_16\_}SCHEMA hr;
(空模式)或DROP SCHEMA hr CASCADE;
(级联删除对象)。 - 搜索路径(
sea{insert\_element\_17\_}rch_path
):控制对象解析顺序,默认$user, public
,可通过SET search_path TO hr, public;
调整优先级。
- 删除:
- 跨模式查询 :需2627显式指定模式名(如
schema1.users
)或通过search_path
设置默认模式。
三、数据操作与备份28恢复
1. 增删改查
- 插入数据 :
INSERT INTO test VALUES(1, 'zhangsan', 18);
。 - 更新数据 :
U{insert\_element\_20\_}PDATE test SET age=20 WHERE id=1;
。 - 删除数据 :
D{insert\_element\_21\_}ELETE FROM test WHERE id=1;
。
2. 备份与恢复31(SQL 转储为主)
- 备份工具 :
pg_dump
,生成 SQL 脚本,支持跨版本迁移。- 基本命令:
pg_dump dbname > dumpfile
。 - 全库备份:
pg_{insert\_element\_23\_}dumpall > dumpfile
,包含角色和表空间。
- 基本命令:
- 恢复方法 :
35 - 文本恢复:psql dbname < dumpfile
,需提前创建数据库(基于template0
)。- 事务模式:
psq{insert\_element\_25\_}l --set ON_ERROR_STOP=on -1 dbname < infile
,确保完全恢复或回滚。
- 事务模式:
四、远程连接与密码3436重置
1. 远程连接配置
- 修改监听地址 :编辑
postgresql.conf
,将listen_addresses
改为*
,允许所有 IP 访问。 - 权限配置 :编辑3738
pg_hba.conf
,添加规则如host all all 0.0.0.0/0 trust
(测试环境)或md5
(生产环境)。 - 验证连接 :使用3940
psql -h 目标IP
测试,trust
模式无需密码,md5
需输入密码。
2. 密码重置流4142程
- 备份配置 :复制
pg_hba.conf
为pg_hba.confbak
。 - 临时信任本地连接43 :将
pg_hba.conf
中本地连接认证改为trust
。 - 重启服务 :
{insert\_element\_31\_}systemctl restart postgresql
。 - 修改密码 :
{insert\_element\_32\_}ALTER USER postgres WITH PASSWORD 'new_password';
。 - 恢复配置 :还46原
pg_hba.conf
并重启。
五、核心
- 47适用场景:从简单应用到复杂企业级开发,需结合实际操作深化理解。
- 扩展建议:后续可学习性能调优、高可用架构等高级功能,夯实数据库运维能力。
六、用户与权限管理
1. 用户与角色管理
- 角色与用户的关系 :PostgreSQL 使用 "角色" 统一管理用户和组,用户是拥有
LOGIN
权限的角色。 - 核心操作 :
- 创建角色:
CREATE ROLE developer;
(默认无登录权限)。 - 创建用户:
CREATE ROLE dev_user WITH LOGIN PASSWORD 'password';
。 - 修改角色:
ALTER ROLE developer WITH LOGIN;
(赋予登录权限)。 - 删除角色:
DROP ROLE developer;
(需先撤销成员资格)。
- 创建角色:
- 角色成员关系 :
- 角色继承:
CREATE ROLE admin SUPERUSER;
,GRANT admin TO dev_user;
,dev_user
继承admin
权限。 - 成员管理:
GRANT admin TO dev_user;
(添加成员),REVOKE admin FROM dev_user;
(移除成员)。
- 角色继承:
2. 权限管理
- 对象权限分类:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER 等。
- 权限操作 :
- 授予权限:
GRANT SELECT, INSERT ON employees TO dev_user;
。 - 撤销权限:
REVOKE INSERT ON employees FROM dev_user;
。 - 特殊权限:
GRANT ALL PRIVILEGES ON employees TO dev_user;
(授予所有权限)。
- 授予权限:
- 模式权限 :
- 访问控制:
GRANT USAGE ON SCHEMA hr TO dev_user;
(允许访问模式)。 - 创建对象:
GRANT CREATE ON SCHEMA hr TO dev_user;
(允许在模式中创建对象)。
- 访问控制:
- 默认权限 :通过
ALTER DEFAULT PRIVILEGES
设置新对象的默认权限,适用于批量管理。
七、表空间管理
1. 表空间基础
-
定义:表空间是文件系统目录,用于存储数据库对象(表、索引等),可跨磁盘分配数据。
-
创建表空间 :
CREATE TABLESPACE fastspace LOCATION '/data/fast_disk'; -- 需确保目录存在且postgres用户有读写权限
-
删除表空间 :
DROP TABLESPACE fastspace;
(需先移动或删除其中的对象)。
2. 表空间应用
-
在表空间创建对象 :
CREATE DATABASE reporting TABLESPACE fastspace; CREATE TABLE sales (id int, amount numeric) TABLESPACE fastspace; CREATE INDEX idx_sales ON sales(id) TABLESPACE fastspace;
-
移动现有对象 :
ALTER TABLE sales SET TABLESPACE fastspace; ALTER INDEX idx_sales SET TABLESPACE fastspace;
-
查看表空间使用情况 :
SELECT spcname, pg_tablespace_size(spcname) FROM pg_tablespace; SELECT pg_size_pretty(pg_tablespace_size('fastspace'));
八、监控与性能调优
1. 系统监控
-
查询性能监控 :
-- 查看慢查询(执行时间超过1秒) SELECT query, total_time, calls, rows FROM pg_stat_activity WHERE state = 'active' AND query NOT LIKE '%pg_stat_activity%' ORDER BY total_time DESC LIMIT 5;
-
锁监控 :
-- 查看锁等待情况 SELECT * FROM pg_locks WHERE granted = false;
-
资源使用监控 :
-- 查看CPU使用率 SELECT * FROM pg_stat_activity WHERE state = 'active'; -- 查看内存使用 SHOW shared_buffers; SHOW work_mem;
2. 性能调优
-
配置参数调整 :
shared_buffers
:设置数据库使用的共享内存缓冲区大小,建议为物理内存的 25%。work_mem
:排序和哈希表操作使用的内存,单位为 KB,默认 4MB。maintenance_work_mem
:VACUUM、CREATE INDEX 等维护操作使用的内存。
-
索引优化 :
-- 创建索引 CREATE INDEX idx_employees_name ON employees(last_name, first_name); -- 查看索引使用情况 SELECT relname, idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes;
-
查询优化 :
-- 执行计划分析 EXPLAIN ANALYZE SELECT * FROM employees WHERE department = 'IT';
九、高可用与复制
1. 流复制(物理复制)
- 原理:基于 WAL(预写日志)的物理复制,主库发送 WAL 日志到备库应用。
- 配置步骤 :
-
主库配置:
# postgresql.conf wal_level = replica max_wal_senders = 10 wal_keep_segments = 32 # pg_hba.conf host replication replicator 192.168.1.0/24 md5
-
备库初始化:
pg_basebackup -h primary_host -D /var/lib/postgresql/data -U replicator -P -X stream
-
备库配置:
# recovery.conf standby_mode = 'on' primary_conninfo = 'host=primary_host port=5432 user=replicator password=password'
-
2. 逻辑复制
- 特点:基于行的复制,可选择性复制表,支持双向复制。
- 配置步骤 :
-
发布端配置:
CREATE PUBLICATION my_publication FOR TABLE employees, departments;
-
订阅端配置:
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=pub_host port=5432 dbname=pub_db user=rep_user password=password' PUBLICATION my_publication;
-
十、故障排除与恢复
1. 常见故障处理
- 数据库无法启动 :
- 检查日志文件(通常在
pg_log
目录)。 - 验证数据目录权限:
chown -R postgres:postgres /var/lib/postgresql/data
。 - 检查端口占用:
netstat -tulpn | grep 5432
。
- 检查日志文件(通常在
- 磁盘空间不足 :
- 清理 WAL 归档:
pg_archivecleanup
工具。 - 执行 VACUUM FULL:
VACUUM FULL verbose employees;
。 - 扩展存储:添加新表空间或挂载更大磁盘。
- 清理 WAL 归档:
2. 灾难恢复
- 基于时间点恢复(PITR) :
-
确保启用 WAL 归档:
# postgresql.conf archive_mode = on archive_command = 'cp %p /archive/%f'
-
恢复步骤:
# 停止数据库 pg_ctl stop # 复制基础备份 cp -R /backup/basebackup /var/lib/postgresql/data # 创建恢复配置 touch /var/lib/postgresql/data/recovery.signal echo "restore_command = 'cp /archive/%f %p'" > /var/lib/postgresql/data/recovery.conf echo "recovery_target_time = '2023-01-01 12:00:00'" >> /var/lib/postgresql/data/recovery.conf # 启动数据库 pg_ctl start
-
十一、自动化运维
1. 定期维护脚本
#!/bin/bash
# PostgreSQL日常维护脚本
# 配置信息
PGUSER="postgres"
PGPASSWORD="password"
PGHOST="localhost"
PGPORT="5432"
PGDATABASE="mydb"
LOGFILE="/var/log/postgresql/maintenance_$(date +%Y%m%d).log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOGFILE
}
# 执行VACUUM和ANALYZE
log "开始执行VACUUM和ANALYZE..."
psql -U $PGUSER -h $PGHOST -p $PGPORT -d $PGDATABASE -c "VACUUM ANALYZE;"
log "VACUUM和ANALYZE完成"
# 备份数据库
log "开始备份数据库..."
pg_dump -U $PGUSER -h $PGHOST -p $PGPORT -d $PGDATABASE -F c -b -v -f "/backup/mydb_$(date +%Y%m%d).dump"
log "数据库备份完成"
# 清理旧备份(保留7天)
log "清理旧备份..."
find /backup -type f -name "mydb_*.dump" -mtime +7 -exec rm -f {} \;
log "旧备份清理完成"
log "维护脚本执行完毕"
2. 监控告警配置
-
使用 pg_stat_activity 监控慢查询 :
CREATE OR REPLACE FUNCTION check_long_running_queries() RETURNS void AS $$ DECLARE query_record RECORD; BEGIN FOR query_record IN SELECT pid, query, state, query_start, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active' AND query NOT LIKE '%pg_stat_activity%' AND now() - query_start > interval '5 minutes' LOOP RAISE WARNING '长时间运行的查询 (PID: %, 持续时间: %):%', query_record.pid, query_record.duration, query_record.query; -- 可添加发送邮件或短信告警的逻辑 END LOOP; END; $$ LANGUAGE plpgsql;
十二、总结与实践建议
- 定期维护:制定每周 / 每月维护计划,执行 VACUUM、统计信息更新和备份。
- 性能监控:设置自动化监控系统,及时发现并处理慢查询和资源瓶颈。
- 高可用部署:根据业务需求选择流复制或逻辑复制,确保数据冗余。
- 文档与演练:完善故障恢复文档,定期进行灾难恢复演练。
- 版本升级:关注 PostgreSQL 官方版本更新,适时升级以获取新特性和性能优化。