一、基本使用
1. 连接数据库
-
使用 PostgreSQL 自带的命令行客户端
psql是最基本的方式:bashpsql -U <username> -d <database_name> -h <host> -p <port>-U: 指定用户名-d: 指定要连接的数据库名-h: 指定数据库服务器主机地址(本地可省略或用localhost)-p: 指定数据库服务器端口(默认5432可省略)
-
连接成功后,会进入
psql的交互式命令行界面,提示符通常类似database_name=>。
2. 用户与权限管理
-
创建用户 :
sqlCREATE USER username WITH PASSWORD 'your_password';- 更精细控制可使用
CREATE ROLE。
- 更精细控制可使用
-
修改用户密码 :
sqlALTER USER username WITH PASSWORD 'new_password'; -
授权 :授予用户对特定数据库对象的访问权限(如
SELECT,INSERT,UPDATE,DELETE,ALL PRIVILEGES)。sqlGRANT privilege_type ON database_name.table_name TO username; -- 示例:授予 SELECT 权限 GRANT SELECT ON employees TO report_user; -
撤销权限 :
sqlREVOKE privilege_type ON database_name.table_name FROM username; -
查看用户权限 :可通过系统视图
information_schema.role_table_grants或pg_roles查询。
3. 数据库操作
-
创建数据库 :
sqlCREATE DATABASE database_name;- 可指定所有者
OWNER username。
- 可指定所有者
-
切换当前数据库 (在
psql内):sql\c database_name -
列出所有数据库 :
sql\l -
删除数据库 :
sqlDROP DATABASE database_name;- 注意:删除数据库操作不可逆,需谨慎。
4. 表操作
-
创建表 :
sqlCREATE TABLE table_name ( column1 datatype [constraints], column2 datatype [constraints], ... );- 常用数据类型:
INTEGER,BIGINT,NUMERIC,VARCHAR(n),TEXT,DATE,TIMESTAMP,BOOLEAN等。 - 常用约束:
PRIMARY KEY,FOREIGN KEY,NOT NULL,UNIQUE,CHECK。
- 常用数据类型:
-
查看表结构 :
sql\d table_name -
修改表 (添加列):
sqlALTER TABLE table_name ADD COLUMN new_column datatype; -
重命名表 :
sqlALTER TABLE old_table_name RENAME TO new_table_name; -
删除表 :
sqlDROP TABLE table_name;
5. 数据操作
-
插入数据 :
sqlINSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); -
查询数据 :
sqlSELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY ...] [LIMIT ...]; -
更新数据 :
sqlUPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;- 重要 :务必使用
WHERE子句限定范围,否则会更新所有行!
- 重要 :务必使用
-
删除数据 :
sqlDELETE FROM table_name WHERE condition;- 重要 :务必使用
WHERE子句限定范围,否则会删除所有数据!
- 重要 :务必使用
6. 索引管理
-
创建索引 (加速查询):
sqlCREATE INDEX index_name ON table_name (column_name);- 可创建唯一索引
CREATE UNIQUE INDEX ...。 - 可创建多列索引
CREATE INDEX ... ON table_name (col1, col2)。
- 可创建唯一索引
-
查看索引 :
sql\d table_name -- 会列出表相关的索引 -
删除索引 :
sqlDROP INDEX index_name;
7. 备份与恢复
-
逻辑备份 (pg_dump) :导出数据库结构和数据(文本或自定义格式)。
-
备份单个数据库:
bashpg_dump -U username -d database_name -f backup_file.sql -
备份所有数据库(需超级用户权限):
bashpg_dumpall -U postgres -f all_databases.sql
-
-
恢复逻辑备份 :
bashpsql -U username -d database_name -f backup_file.sql -
物理备份 (文件系统级) :复制
PGDATA目录下的数据文件。通常需要结合 基础备份 (Base Backup) 和 WAL 归档 (Write-Ahead Log Archiving) 来实现持续恢复(PITR)。这属于更高级的维护范畴。
8. 查看系统信息
-
查看版本 :
sqlSELECT version(); -
查看活动连接 :
sqlSELECT * FROM pg_stat_activity; -
查看数据库大小 :
sqlSELECT pg_size_pretty(pg_database_size('database_name')); -
查看表大小:
sql
SELECT pg_size_pretty(pg_total_relation_size('table_name'));
9.远程连接
修改 pg_hba.conf 文件
路径通常为 /etc/postgresql/{版本}/main/pg_hba.conf
添加规则:
plaintext
host all all {客户端IP或网段} md5
示例(允许所有 IP):
plaintext
host all all 0.0.0.0/0 md5
修改 postgresql.conf 文件
路径通常为 /etc/postgresql/{版本}/main/postgresql.conf
启用监听:
plaintext
listen_addresses = '*' # 监听所有网络接口
重启 PostgreSQL 服务
bash
sudo systemctl restart postgresql
配置防火墙
开放默认端口 5432:
bash
sudo ufw allow 5432/tcp
客户端连接命令
bash
psql -h {服务器IP} -U {用户名} -d {数据库名}
示例:
bash
psql -h 192.168.1.100 -U postgres -d testdb
关键注意事项
安全建议
避免使用 0.0.0.0/0(可替换为具体 IP 段)。
生产环境建议使用证书认证(cert 替代 md5)。
常见问题排查
检查服务状态:sudo systemctl status postgresql
验证端口监听:netstat -tuln | grep 5432
客户端测试连通性:telnet {服务器IP} 5432
密码认证
若使用 md5,需确保用户密码已设置:
sql
ALTER USER postgres PASSWORD 'your_password';