一、环境准备与安装过程
1.1 系统环境
- 操作系统:Ubuntu 22.04 LTS
- PostgreSQL版本:15.8
- 安装包来源:官方APT仓库
1.2 安装步骤详解
csharp
# 步骤1:更新系统仓库
sudo apt update && sudo apt upgrade -y
# 步骤2:添加PostgreSQL官方仓库
sudo apt install -y software-properties-common
sudo add-apt-repository 'deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main'
# 步骤3:导入仓库密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 步骤4:安装数据库服务
sudo apt install -y postgresql postgresql-contrib
关键验证点:
bash
# 检查服务状态
systemctl status postgresql
# 预期输出:Active: active (exited)
# 查看安装版本
psql --version
# 输出示例:psql (PostgreSQL) 15.8
1.3 初始配置
ini
# 步骤1:切换到postgres用户
sudo -i -u postgres
# 步骤2:进入psql控制台
psql
# 步骤3:创建初始用户和数据库
CREATE USER admin WITH PASSWORD 'SecurePass123!' CREATEDB CREATEROLE;
CREATE DATABASE mydb OWNER admin;
\q
权限验证:
sql
SELECT usename, usesuper, valuntil FROM pg_user;
二、核心操作指令集
2.1 数据库管理
操作 | 命令示例 | 说明 |
---|---|---|
连接数据库 | psql -U admin -d mydb |
使用指定用户连接 |
列出数据库 | \l |
显示所有数据库 |
创建数据库 | CREATE DATABASE test WITH ENCODING 'UTF8'; |
指定编码格式 |
删除数据库 | DROP DATABASE IF EXISTS old_db; |
安全删除操作 |
systemctl status postgresql
执行 systemctl status postgresql 实时监控服务运行状态,包含进程信息、日志摘要和资源占用。查看服务启动时长和进程信息。
shell
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2025-08-26 14:30:00 CST; 2h 15min ago
Process: 1234 ExecStart=/usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf (code=exited, status=0/SUCCESS)
Main PID: 1234 (code=exited, status=0/SUCCESS)
基础配置验证
shell
# 验证服务是否监听正确地址
netstat -plnt | grep postgres
# 预期输出:tcp6 0 0 :::5432 :::* LISTEN postgres
权限配置验证
shell
-- 查看用户权限
\du
-- 验证远程连接配置
SELECT * FROM pg_hba_file_rules WHERE database = 'all' AND user = 'all';
2.2 表操作
sql
-- 创建带约束的表
CREATE TABLE employees (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(50) NOT NULL CHECK (name ~ '^[A-Za-z]+$'),
salary NUMERIC(10,2) CHECK (salary > 0),
hire_date DATE DEFAULT CURRENT_DATE
);
-- 修改表结构
ALTER TABLE employees ADD COLUMN department VARCHAR(20);
ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12,2);
2.3 数据操作
sql
-- 批量插入数据
INSERT INTO employees (name, salary)
VALUES
('Alice', 75000.50),
('Bob', 82000.00)
RETURNING id, name;
-- 事务操作
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
2.4 权限管理
sql
-- 创建只读用户
CREATE ROLE read_only WITH LOGIN PASSWORD 'ReadOnlyPass!';
GRANT CONNECT ON DATABASE mydb TO read_only;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only;
-- 撤销权限
REVOKE DELETE ON employees FROM read_only;
三、故障排查实战记录
3.1 典型问题案例
问题现象:新创建用户无法连接数据库
vbnet
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "user_hrjd4h"
排查过程:
- 检查pg_hba.conf配置
bash
grep -A 5 'host' /etc/postgresql/15/main/pg_hba.conf
发现配置项:
css
host all all 0.0.0.0/0 scram-sha-256
- 验证密码策略
sql
ALTER USER user_hrjd4h WITH PASSWORD 'NewPass123!';
-
重启服务使配置生效
sudo systemctl restart postgresql
3.2 性能问题分析
场景:复杂查询执行缓慢
sql
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE created_at BETWEEN '2025-01-01' AND '2025-08-31'
ORDER BY total_amount DESC;
优化方案:
sql
-- 创建复合索引
CREATE INDEX idx_orders_date_amount ON orders (created_at, total_amount DESC);
3.3 备份恢复方案
全量备份:
r
pg_dump -U admin -F c -b -v -f /backup/mydb.dump mydb
增量备份:
bash
pg_basebackup -D /backup/inc1 -Fp -Xs -P -v -h localhost -U admin
四、最佳实践总结
4.1 安全加固
- 启用SSL连接
vbnet
sudo openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key -subj "/CN=localhost"
- 定期密码轮换
sql
ALTER USER admin WITH PASSWORD 'NewSecurePass456!';
4.2 性能监控
sql
-- 启用统计扩展
CREATE EXTENSION pg_stat_statements;
-- 查看最耗时查询
SELECT query, calls, total_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;
4.3 自动化维护
bash
# 创建每日备份脚本
cat << EOF > /opt/postgres/backup_daily.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
pg_dump -U admin -F c -b -v -f /backup/$DATE.dump mydb
EOF
# 设置定时任务
chmod +x /opt/postgres/backup_daily.sh
(crontab -l 2>/dev/null; echo "0 2 * * * /opt/postgres/backup_daily.sh") | crontab -
五、附录:常用命令速查表
分类 | 命令示例 | 说明 |
---|---|---|
服务管理 | systemctl restart postgresql |
重启服务 |
用户管理 | ALTER USER user WITH LOGIN |
设置登录权限 |
查询优化 | EXPLAIN (ANALYZE, BUFFERS) SELECT ... |
执行计划分析 |
日志查看 | tail -f /var/log/postgresql/postgresql-15-main.log |
实时日志监控 |
通过本次部署实践,我们系统性地覆盖了PostgreSQL的安装配置、核心操作和故障处理。建议定期执行VACUUM ANALYZE
维护数据库健康,并通过pg_stat_activity
监控实时连接状态。生产环境中务必配置防火墙规则(仅开放必要端口)并启用审计日志功能。
六、其他记录
软件初始占用内存:0.05g