PostgreSQL 日常维护
目录
1. 数据库操作
2. 数据表操作
3. 模式操作命令
4. 数据操作
5. 备份与恢复
6. 远程连接
7. 重置密码
1. 数据库操作
(1) 列出表
常用的三种方法如下:
方法一:
postgres=# \1
在 PostgreSQL 的交互终端 psql 中, "\" 开头的命令称为元命令(类似MySQL的 SHOW 语句),用于快速管理数据库常用元命令有:
\1 列出所有数据库。 \c [数据库名]或 connect[数据库名] \dn 列出所有模式(Schema)。 \db 列出所有表空间。 \? 显示pgsql 命令的说明(元命令查询帮助) \q 退出 psq1 \dt 列出当前数据库的所有表 \d[TABLE] 查看表结构 \du 列出所有用户
方法二:
postgres=# \1+
\1+的输出比1多了Size,Tablespace 和 Description 列
+:扩展输出,显示更多字段或详细信息
方法三:
使用 SQL 命令
postgres=# SELECT datname FROM pg_database;
pg database 是系统表:它存储了 PostgreSQl, 实例中所有数据库的元信息(如数据库名称、所有者、编码等)。属于系统目录(System Catalog):类似 MySQL的 information_schema,但 PostgreSQL 的系统目录更底层且直接存储在pg_catalog 模式中。
pg_database 是系统目录表,所以无论当前连接到哪个数据库,该表始终可见系统表默认属于pg_catalog 模式,而 pg_catalog 始终位于搜索路径(search_path)的首位。因此,查询时无需显式指定模式(如pg_catalog.pg_database)。
(2) 创建库
postgres=# create database mydb; CREATE DATABASE
(3) 删除库
postgres=# drop database mydb; DROP DATABASE
(4) 切换库
postgres=# \c mydb; You are now connected to database "mydb" as user "postgres". mydb=#
(5) 查看库大小
函数以字节为单位返回数据库的大小 postgres=# SELECT pg database size('mydb'); pg_database size ----------------------7594499(1 行记录) 函数将字节转为更易于阅读值 postgres-# SElECT pg size pretty(pg database size( mydb')); pg_size _pretty ----------------------7417 kB (1 行记录)
2. 数据表操作
(1) 列出表
列出表的常用方法:
mydb=# \dt; 列出表(显示 search path 中模式里的表,默认 public)
mydb=# \d; 列出表,视图和序列
mydb=#\dt my schema.* 列出指定模式下的表(例如 my_schema)
mydb=#\dt *.* 查看当前数据库的所有表(包括系统表)
mydb=#SELECT * FROM pg tables WHERE schemaname ='public’; 使用 SLQL 方式列出当前数据库中 public 模式下的所有表及其详细信息
(2) 创建表
PostgreSQL 支持标准的SQL类型 int、smallint、real、double precision、char(N)、varchar(N)、date、time、timestamp和interval,还支持其他的通用功能的类型和丰富的几何类型。PostgreSQl中可以定制任意数量的用户定义数据类型。因而类型名并不是语法关键字,除了 SQL 标准要求支持的特例外。
postgres=# create table test(id int,name char(10),age int);
(3) 复制表
要将已有的 table_name 表复制为新表 new table,包括表结构和数据,请使用以下语句
CREATE TABLE new table AS TABLE table name;
(4) 删除表
postgres=# drop table test2;
(5) 查看表结构
postgres=#d test:
3. 模式操作命令
在 PostgreSL 中,模式(Schema)是一个逻辑容器,用于组织和管理数据库对象(如表、视图、函数、索引等)。它类似于文件系统中的文件夹,帮助你在同一个数据库中分类存储不同的对象,避免命名冲突,并实现权限离
(1) 创建模式
在当前库 postgres 中创建名为 hr 的模式
postgreS=# CREATE SCHEMA hr;
(2) 默认模式
PostgresQl, 每个数据库都有一个默认模式 public。如果创建对象(表、视图等)时不指定模式,默认会放在public 模式中。通过 search path 参数可以设置模式的搜索优先级(类似 PATH 环境变量):
postgres=# SHOW search path;
(3) 删除模式
删除空模式
postgres=# DROP SCHEMA hr:
强制删除模式及其所有对象
postgres=# DROP SCHEMA hr CASCADE;
(4) 查看所有模式
元命令列出当前库中所有模式
postgres=# dn
SQL 查询,列出当前库中所有模式
postgres-# SElECT schema name FROM information schema. schemata;
(5) 在指定模式中创建表
未指定模式时,创建的对象(表,视图等)会按 search_path 顺序创建到第一个可用的模式中
在 postgres 库中的 hr 模式下创建一个名为employees 的库
postgres-#CREATE TABlE hr.employees (id SERIAL, PRIMARY KEY, name TEXT);
(6) 切换当前模式
切换模式也就是调整search path 的搜索范围
切换到单个 schema
SET search path TO new schema;
切换到多个 schema(按优先级顺序)
SET search path To hr,public;
(7) 查看当前所在 schema
postgres-# SELECT current schema():
(8) 查看搜索路径 (Search Path)
postgres=# SHOW search path;
4. 数据操作
(1) 添加数据
在 postgres 库,新建表 test
postgres=# create table test(id int,name char(10),age int);
postgres=# insert into test values(l, zhangsan',18);
(2) 查询数据
postgres=# select * from test;
(3) 修改数据
postgres=# update test set age=20 where id=l;
postgres=# select *from test;
(4) 删除数据
postgres=# delete from test where id=l:
postgres=# select * from test;
5. 备份与恢复
PostgreSQ 数据库应当被定期地备份。虽然过程相当简单,但清晰地理解其底层技术和假设是非常重要的。
有三种不同的基本方法来备份 PostgresQL 数据:
(1) SQL 转储
SQL 转储方法的思想是创建一个由 SQL命令组成的文件,当把这个文件回馈给服务器时,服务器将利用其中的 SQL 命令重建与转储时状态一样的数据PostgresqL 为此提供了工具 pg_dump。这个工具的基本用法是:
pg_dump dbname >dumpfile
(2) 从转储中恢复
pg_dump 生成的文本文件可以由 psq1 程序读取。 从转储中恢复的常用命令是:
psql dbname < dumpfile
(3) 使用 pg_dumpall
pg_dump 每次只转储一个数据库,而且它不会转储关于角色或表空间(因为它们是集簇范围的)的信息。为了支持方便地转储一个数据库集簇的全部内容,提供了 pg_dumpa11程序。pg_dumpa11 备份一个给定集簇中的每一个数据库,并且也保留了集簇范围的数据,如角色和表空间定义。该命令的基本用法是:
pg_dumpall >dumpfile 转储的结果可以使用 psq1 恢复: psql -f dumpfile postgres
6. 远程连接
(1) 修改 PostgreSQL 监听地址
默认 PostgreSql 监听的地址是 127.0.0.1,别的机器无法远程连接上,所以需要调整,修改 postgresql.conf 文件。
通过 dnf 安装的 pgsq1配置文件在
/var/lib/pgsql/data/postgresql. conf
通过源码编译安装的 pgsq1配置文件在
/usr/local/pgsql/data/postgresql.conf
以 dnf 安装为例:
更改第60行,取消注释并把localhost 改成*
[root@bogon ~]# grep 'listen addresses' /var/lib/pgsql/data/postgresql. conf
重启服务
systemetl restart postgresql ss -tnl
(2) 配置访问权限
默认是只能本地访间 PostgreSql 的,我们需要在 pg hba.conf 里面配置
找到IPv4 local connections 这一行,在这一行下面添加 host all all 0.0.0.0/0 trust
(3) 重启服务
systemctl start postgresql
(4) 验证远程连接
使用其它主机远程连接本机数据库,设置的是trust,无密码,可直接登录
7. 重置密码
(1) 备份配置文件
对 pg_hba.conf 文件,进行备份
[root@localhost ~]# cp /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql. confbak
(2) 修改配置文件
修改配置文件以信任本地连接不需要密码。将配置文件中的 scram-sha-256 或者 md5 修改为 trust
[root@localhost ~]# vim /var/lib/pgsql/data/postgresql.conf
(3) 重启服务
[root@localhost ~]# systemctl restart postgresql
(4) 修改密码
登录数据库修改密码,密码自定义
postgres-# ALTER USER postgres WITH PASSWORD 'new password’:
(5) 恢复 pg_hba.conf 配置文件
将 postgresq1.confbak 文件的内容覆盖 pg_hba.conf,重启 Postgresql 数据库服务器,重新登陆时,如果提示输入密码,则输入刚才修改的密码即可