技能目标
- 掌握 PostgreSQL(psql)的基础操作与元命令使用
- 精通数据库、表、模式(Schema)的创建、管理与权限隔离
- 熟练完成 PostgreSQL 的备份恢复、密码重置与远程连接配置
- 构建 PostgreSQL 日常运维的完整技能体系
前言
PostgreSQL(简称 pgsql)是一款功能强大的开源关系型数据库,以其对 SQL 标准的严格遵循、高扩展性和稳定性,广泛应用于企业级开发、数据分析等场景。本课件围绕 PostgreSQL 的日常运维展开,从基础登录、库表操作,到模式设计、权限管理、备份恢复与远程连接,通过模块化学习,帮助学习者掌握 PostgreSQL 的核心运维技能,为高效管理和开发数据库奠定坚实基础。
一、基础使用
1.1 登录数据库
PostgreSQL 默认使用postgres超级用户登录,登录后命令提示符为postgres=#:
bash
运行
# 切换到postgres用户
[root@localhost ~]# su - postgres
# 启动psql客户端
[postgres@localhost ~]$ /usr/local/pgsql/bin/psql
psql (16.3)
Type "help" for help.
postgres=#
1.2 数据库操作
1.2.1 列出所有数据库
PostgreSQL 提供三种常用方法:
-
方法一:元命令
\l(快速查看)sql
postgres=# \l -
方法二:元命令
\l+(扩展输出,含大小、表空间等详细信息)sql
postgres=# \l+ -
方法三:SQL 查询系统表
pg_databasesql
postgres=# SELECT datname FROM pg_database;pg_database是系统表,存储所有数据库元信息,始终可见,无需指定模式。
1.2.2 创建数据库
sql
postgres=# CREATE DATABASE mydb;
CREATE DATABASE
1.2.3 删除数据库
sql
postgres=# DROP DATABASE mydb;
DROP DATABASE
1.2.4 切换数据库
sql
postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=#
1.2.5 查看数据库大小
-
以字节为单位 :
sql
mydb=# SELECT pg_database_size('mydb'); pg_database_size ------------------ 7594499 (1 行记录) -
以可读格式显示 :
sql
mydb=# SELECT pg_size_pretty(pg_database_size('mydb')); pg_size_pretty ---------------- 7417 kB (1 行记录)
1.3 数据表操作
1.3.1 列出表
-
列出当前库中
search_path内的表(默认public模式) :sql
mydb=# \dt; -
列出表、视图和序列 :
sql
mydb=# \d -
列出指定模式下的表 :
sql
mydb=# \dt hr.* -
SQL 方式列出
public模式下的表 :sql
mydb=# SELECT * FROM pg_tables WHERE schemaname = 'public';
1.3.2 创建表
PostgreSQL 支持标准 SQL 类型与自定义类型,示例:
sql
postgres=# CREATE TABLE test(id int, name char(10), age int);
CREATE TABLE
1.3.3 复制表
复制表结构与数据:
sql
postgres=# CREATE TABLE test2 AS TABLE test;
SELECT 0
1.3.4 删除表
sql
postgres=# DROP TABLE test2;
DROP TABLE
1.3.5 查看表结构
sql
postgres=# \d test;
1.4 模式(Schema)操作
模式是 PostgreSQL 的逻辑容器,用于组织数据库对象,避免命名冲突,实现权限隔离。
1.4.1 创建模式
sql
postgres=# CREATE SCHEMA hr;
CREATE SCHEMA
1.4.2 默认模式
每个数据库默认有public模式,未指定模式时,对象默认创建在public中。通过search_path设置模式搜索优先级(类似 PATH 环境变量):
sql
postgres=# SHOW search_path;
search_path
----------------
"$user", public
(1 行记录)
表示优先查找当前用户同名模式,再查找
public模式。
1.4.3 删除模式
-
删除空模式 :
sql
postgres=# DROP SCHEMA hr; DROP SCHEMA -
强制删除模式及所有对象 :
sql
postgres=# DROP SCHEMA hr CASCADE; DROP SCHEMA
1.4.4 查看所有模式
-
元命令 :
sql
postgres=# \dn -
SQL 查询 :
sql
postgres=# SELECT schema_name FROM information_schema.schemata;
1.4.5 在指定模式中创建表
sql
postgres=# CREATE TABLE hr.employees (id SERIAL PRIMARY KEY, name TEXT);
CREATE TABLE
1.4.6 切换当前模式
调整search_path的搜索范围:
-
切换到单个模式 :
sql
SET search_path TO new_schema; -
切换到多个模式(按优先级) :
sql
SET search_path TO hr, public;
1.4.7 查看当前所在模式
sql
postgres=# SELECT current_schema();
current_schema
----------------
hr
(1 行记录)
1.4.8 模式隔离性演示
PostgreSQL 支持同库同表名,通过模式隔离:
-
创建数据库
mydb:sql
CREATE DATABASE mydb; \c mydb -
创建两个模式
schem1、schema2:sql
CREATE SCHEMA schema1; CREATE SCHEMA schema2; -
在两个模式中创建同名
users表并插入数据 :sql
CREATE TABLE schema1.users (id int); INSERT INTO schema1.users VALUES(1); CREATE TABLE schema2.users (id int); INSERT INTO schema2.users VALUES(2); -
跨模式查询 :
sql
-- 需显式指定模式名 SELECT * FROM schema1.users; SELECT * FROM schema2.users; -- 设置默认模式后可省略 SET search_path TO schema1; SELECT * FROM users; -- 访问schema1.users
1.5 数据增删改查
1.5.1 插入数据
sql
postgres=# INSERT INTO test VALUES(1,'zhangsan',18);
INSERT 0 1
1.5.2 查询数据
sql
postgres=# SELECT * FROM test;
id | name | age
----+----------+-----
1 | zhangsan | 18
(1 行记录)
1.5.3 修改数据
sql
postgres=# UPDATE test SET age=20 WHERE id=1;
UPDATE 1
1.5.4 删除数据
sql
postgres=# DELETE FROM test WHERE id=1;
DELETE 1
二、备份与恢复
PostgreSQL 提供三种备份方式:SQL 转储、文件系统级备份、连续归档,本章以 **SQL 转储(pg_dump)** 为主。
2.1 SQL 转储(pg_dump)
pg_dump将数据库导出为 SQL 脚本,用于重建数据:
bash
运行
# 备份单个数据库
pg_dump dbname > dumpfile
- 支持跨平台迁移(32 位→64 位),备份一致性基于
template0。 - 普通用户可使用
-n schema/-t table备份有权限的对象。
2.2 从转储中恢复
bash
运行
# 恢复数据库
psql dbname < dumpfile
-
若需创建数据库,需先执行
createdb dbname。 -
错误处理:添加
--set ON_ERROR_STOP=on遇到错误终止:bash
运行
psql --set ON_ERROR_STOP=on dbname < infile
2.3 全库备份(pg_dumpall)
备份整个集群的所有数据库、角色和表空间:
bash
运行
pg_dumpall > dumpfile
恢复命令:
bash
运行
psql -f dumpfile postgres
三、远程连接配置
3.1 修改监听地址
默认 PostgreSQL 仅监听127.0.0.1,需修改postgresql.conf:
bash
运行
# 编辑配置文件
[root@localhost ~]# vim /var/lib/pgsql/data/postgresql.conf
# 修改listen_addresses
listen_addresses = '*'
# 重启服务
[root@localhost ~]# systemctl restart postgresql
3.2 配置访问权限(pg_hba.conf)
编辑pg_hba.conf,添加远程访问规则:
ini
# IPv4 local connections:
host all all 0.0.0.0/0 trust
trust表示无密码访问(仅测试环境使用),生产环境建议使用md5/scram-sha-256。
3.3 重启服务与验证
bash
运行
[root@localhost ~]# systemctl restart postgresql
# 远程连接测试
[postgres@localhost ~]$ psql -h 192.168.10.102
四、密码重置
4.1 备份配置文件
bash
运行
[root@localhost ~]# cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.bak
4.2 修改配置文件
将pg_hba.conf中本地连接认证改为trust,免密登录:
ini
host all all 127.0.0.1/32 trust
4.3 重启服务并修改密码
bash
运行
[root@localhost ~]# systemctl restart postgresql
# 免密登录后修改密码
postgres=# ALTER USER postgres WITH PASSWORD 'new_password';
ALTER ROLE
4.4 恢复配置文件
将备份文件覆盖原pg_hba.conf,重启服务,使用新密码登录。
总结
本章系统梳理了 PostgreSQL 的日常运维全流程:从本地登录到远程访问权限配置,从库表的增删改查到模式的逻辑隔离,再到备份恢复与密码重置。PostgreSQL 的灵活性与严谨性使其既能支撑简单应用,也能应对复杂企业级需求。掌握这些核心技能后,可独立完成 PostgreSQL 的基础运维任务,为后续高级功能(如性能调优、高可用)的学习打下坚实基础。