PostgreSQL日志维护
目录
1:登录数据库
2:数据库操作
3:数据表操作
4:模式操作命令
5:数据操作
6:备份与恢复
7:远程连接
8:重置密码
1:登录数据库
su - postgres #切换到程序用户
#启动程序
/usr/local/pgsql/bin/psql
或
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
psql #登录数据库
2:数据库操作
2.1:列出库
#方法一:
\l#方法二:
\l+ #+:扩展输出#方法三:
select datname from pg_database; #查看pg中的库
在postgreSQL的交互式终端psql中,“\”开头的命令称为元命令(类似MySQL的show语句),用于快速管理数据库。常见元命令有:
\c
或\connect [dbname] [username]
连接数据库\q 退出 psql
\l
或\l+
列出所有数据库
\dt
或\dt+ [pattern]
列出当前数据库的表\d [table_name] 查看表结构
\dn
或\dn+
列出模式(Schema)
\du
或\dg
列出用户/角色\df [pattern] 列出函数
\di [pattern] 列出索引
\dv [pattern] 列出视图
\dF 列出外键约束
2.2:创建库
create database 库名;
2.3:删除库
drop database 库名; #切换到另一库进行库删除
2.4:切换库
\c 库名
2.5:查看库大小
select pg_database_size('库名');
3:数据表操作
3.1:列出表
#列出表的常用方法:
\dt;#列出表,视图和序列
\d 表名;
\d+#列出指定模式下的表
\dt 表名.*#查看当前数据库的所有表
\dt *.*
3.2:创建表
create table test();#查看当前模式下的表:
select * 模式名.模式中的表名; #默认模式public
3.3:复制表
create table 新表名 as table 表名;
3.4:删除表
删除表:drop table 表名;
删除库:drop database 库名; #切换到另一库进行库删除
3.5:查看表
#查看当前模式下的表:
select * 模式名.模式中的表名; #默认模式public
4:模式操作命令
4.1:创建模式
CREATE SCHEMA schema_name;
-- 示例:创建名为 `analytics` 的模式
CREATE SCHEMA analytics;#可选参数:指定所有者、权限等。
CREATE SCHEMA schema_name AUTHORIZATION user_name;
4.2:默认模式
#PostgreSQL 的默认模式是 public,新创建的表、视图等对象默认位于此模式。#修改默认模式:通过设置 search_path(见 4.8),将其他模式设为优先搜索路径:-- 设置当前会话的默认模式为 `analytics`
SET search_path TO analytics, public;
-- 永久修改用户的默认模式(需执行 ALTER ROLE)
ALTER ROLE user_name SET search_path = analytics, public;
4.3:删除模式
-- 删除空模式
DROP SCHEMA schema_name;
-- 强制删除模式及其所有对象(级联删除)
DROP SCHEMA schema_name CASCADE;
-- 示例:删除 `analytics` 模式及其所有表、视图等
DROP SCHEMA analytics CASCADE;
4.4:查看所有模式
\dn -- 列出所有模式
\dn+ -- 显示模式的详细信息(所有者、权限等)
4.5:在指定模式中创建表
#方法 1:显式指定模式名
CREATE TABLE schema_name.table_name (id SERIAL PRIMARY KEY,data TEXT
);
-- 示例:在 `analytics` 模式中创建表 `logs`
CREATE TABLE analytics.logs (id INT, log_time TIMESTAMP);#方法 2:通过 search_path 设置默认模式(见 4.2),之后直接创建表即可。
4.6:切换当前模式
#通过修改 search_path 切换当前会话的有效模式:-- 切换为 `analytics` 模式(仅当前会话有效)
SET search_path TO analytics;
-- 切换后,新创建的表默认位于此模式
CREATE TABLE new_table (...);
4.7:查看当前所在schema
SELECT current_schema(); -- 返回当前有效模式(即 `search_path` 中的第一个模式)
4.8:查看搜索路径(search path)
SHOW search_path; -- 显示当前搜索路径
-- 示例输出:`"$user", public, analytics`#修改搜索路径:
SET search_path TO schema1, schema2, public; -- 临时修改
ALTER ROLE user_name SET search_path = schema1, public; -- 永久修改
4.9:postgreSQL的模式隔离性
-
隔离性特性:
-
不同模式中的对象(表、视图、函数等)彼此独立,即使同名也不会冲突。
-
访问其他模式的对象需显式指定模式名(如
schema_name.table_name
)或将该模式加入search_path
。
-
#模式权限独立于数据库权限,需单独授权:-- 授权用户 `user1` 访问 `analytics` 模式
GRANT USAGE ON SCHEMA analytics TO user1;
-- 授权用户 `user1` 在 `analytics` 模式中创建表
GRANT CREATE ON SCHEMA analytics TO user1;
5:数据操作
5.1:添加数据
#插入单条数据
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);
-- 示例:向 `users` 表插入一条记录
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');#插入多条数据
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2),(值3, 值4);
-- 示例:批量插入用户数据
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'),('Charlie', 'charlie@example.com');#从其他表复制数据
INSERT INTO 目标表 (列1, 列2)
SELECT 列A, 列B FROM 源表 WHERE 条件;
-- 示例:将 `old_users` 表中状态为活跃的用户复制到 `users`
INSERT INTO users (name, email)
SELECT name, email FROM old_users WHERE status = 'active';
5.2:查询数据
SELECT * FROM 表名; -- 查询所有列
SELECT 列1, 列2 FROM 表名; -- 查询指定列
-- 示例:查询 `users` 表的 `name` 和 `email`
SELECT name, email FROM users;
5.3:修改数据
#更新单列
UPDATE 表名 SET 列名 = 新值 WHERE 条件;
-- 示例:将用户 Alice 的邮箱更新
UPDATE users SET email = 'new_alice@example.com' WHERE name = 'Alice';#更新多列
UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;
-- 示例:更新用户状态和最后登录时间
UPDATE users
SET status = 'inactive', last_login = NOW()
WHERE last_login < '2023-01-01';
5.4:删除数据
#删除指定行
DELETE FROM 表名 WHERE 条件;
-- 示例:删除状态为注销的用户
DELETE FROM users WHERE status = 'deleted';#清空表
TRUNCATE TABLE 表名; -- 快速清空表(不可回滚)
TRUNCATE TABLE 表名 CASCADE; -- 级联清空关联表
6:备份与恢复
有三种不同的基本方法来备份postgresql数据:
SQL转储
文件系统级备份
连续归档
6.1:SQL转储
用途:备份单个数据库,生成 SQL 脚本或自定义格式文件。
命令格式:
pg_dump [选项] 数据库名 > 输出文件
常用选项:
-U username
:指定用户名。
-h hostname
:数据库服务器地址(默认本地)。
-p port
:数据库端口(默认 5432)。
-F format
:输出格式(p
纯文本,c
自定义压缩格式,d
目录格式)。
--create
:在脚本中包含CREATE DATABASE
命令。
-C
:同--create
。
-j N
:并行备份(仅目录格式支持)。
6.2:从转储中恢复
恢复工具:
-
psql
:用于恢复纯文本 SQL 备份。 -
pg_restore
:用于恢复自定义格式(-Fc
)或目录格式备份。
# 先创建数据库(若备份不含 --create)
createdb -U myuser newdb
psql -U myuser -d newdb -f mydb_backup.sqlpsql -U myuser -d postgres -f mydb_backup.sql
6.3:使用pg_dumpall
用途:备份整个 PostgreSQL 集群(所有数据库、全局对象如角色、表空间)。
命令格式:
pg_dumpall [选项] > 输出文件
常用选项:
-U username
:超级用户权限(必须)。
--globals-only
:仅备份全局对象(角色、表空间)。
7:远程连接
7.1:修改postgresql监听地址
将 listen_addresses
修改为 '*'
(监听所有IP)或指定IP,例如
listen_addresses = '*' # 允许所有远程连接
7.2:配置访问权限
编辑 pg_hba.conf
文件
路径通常与 postgresql.conf
同级,添加一行规则:
# 格式:host <数据库> <用户> <IP范围> <认证方式>
host all all 0.0.0.0/0 md5
-
0.0.0.0/0
允许所有IPv4地址;::/0
允许所有IPv6。 -
md5
表示需要密码认证(推荐),trust
为无密码(不安全)。
7.3:重启服务
启动服务:systemctl restart postgresql 或
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
检查服务状态:ss -tnl
关闭防火墙:
7.4:验证远程连接
-
检查服务监听状态
运行以下命令确认 PostgreSQL 正在监听公共接口:netstat -an | grep 5432输出应包含 0.0.0.0:5432 或 :::5432。
-
测试远程连接
从另一台机器使用psql
或客户端工具连接:psql -h <服务器IP> -U <用户名> -d <数据库名>
8:重置密码
8.1:备份配置文件
-
定位 PostgreSQL 配置文件目录(通常位于
/etc/postgresql/<版本>/main/
或/var/lib/pgsql/data/
)。 -
备份关键配置文件:
sudo cp /path/to/postgresql/data/pg_hba.conf /path/to/postgresql/data/pg_hba.conf.backup
sudo cp /path/to/postgresql/data/postgresql.conf /path/to/postgresql/data/postgresql.conf.backup#使用 SHOW hba_file; 在 psql 中查询 pg_hba.conf 路径。
8.2:修改配置文件
#编辑 pg_hba.conf,将认证方式改为 trust(允许本地无密码登录):
sudo nano /path/to/postgresql/data/pg_hba.conf#找到以下行并修改:
- local all all md5
+ local all all trust
8.3:重启服务
# Systemd 系统
sudo systemctl restart postgresql# 或使用 pg_ctl
sudo pg_ctl restart -D /path/to/postgresql/data
8.4:修改密码
#无密码登录到 psql:
psql -U postgres # 无需输入密码#执行密码修改命令:
ALTER USER 用户名 WITH PASSWORD '新密码';#退出 psql:
\q
8.5:恢复pg_hba.conf配置文件
#还原备份的配置文件:
sudo mv /path/to/postgresql/data/pg_hba.conf.backup /path/to/postgresql/data/pg_hba.conf#再次重启 PostgreSQL 服务:
sudo systemctl restart postgresql