当前位置: 首页 > news >正文

PosterSQL日常维护

基本使用

登录数据库

Pgsql登录时,必须使用postgres用户,登录后命令提示符魏  “postgres=#”  postgres表示你当期那所在的库。

[root@bogon ~]# su - postgres
[postgres@bngon ~]# /usr/local/pgsql/bin/sql
psql (16.3)
Type "hulp" for help.postgres=#

数据库操作

列出库

常用的三种方法如下:

方法一

postgres=#\l

在PostgresSQL 的交互式终端psql中, “\” 开头的命令称为元命令(类似MySQL的show语句),用于快速管理数据库。常用元命令有:

命令功能描述示例

\l

列出所有数据库\l

\c [数据库名]

连接到指定数据库\c mydatabase

\connect [数据库名]

连接到指定数据库(与 \c 等效)\connect mydatabase

\dn

列出所有模式(Schemas)\dn

\db

列出所有表空间\db

\?

显示 psql 元命令帮助\?

\q

退出 psql 会话\q

\dt

列出当前数据库的所有表\dt

\dt [模式名.]*

列出指定模式下的所有表\dt public.*

\d [表名]

查看指定表的详细结构\d users

\d+ [表名]

查看表的详细结构(包含更多信息)\d+ products

\du

列出所有用户和角色\du

\h [SQL命令]

查看 SQL 命令的语法帮助\h SELECT

\i [文件路径]

执行 SQL 文件\i /path/to/script.sql

\e

在编辑器中打开当前 SQL 命令\e
\dv列出所有视图\dv
\df列出所有函数\df
\di [表名]查看表的索引\di orders
\da列出所有聚合函数\da
\pset [选项]设置输出格式(如 \pset format aligned\pset format aligned

方法二:

使用SQL命令

postgres=# select datname from pg_database;

pg_database 是系统表:他储存了PostgreSQL 实力中所有的元信息(如数据库名称、所有者、编码等)。属于系统目录(system Catalog ):类似MySQl的information_schema,但 PostgrsSQL 的系统目录更底层且直接储存在pg_catalog模式中。

pg_database 是系统表,所以无论当链接那个数据库,该表始终可见系统表默认属于 pg_catalog模式,而pg_catalog始终位于搜索路径(search_path)的首位。因此,查询时无需指定模式(如 pg_catalog.pg_database)。

创建库

postgres=# create database mydb;
CREATE DATABASE

删除库

postgres=# \c mydb
DROP DATABASE

切换库

postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=#

查看库大小

函数以字节为单位返回数据的大小

postgres=# selecl pg_size_prettty(pg_database_size('mydb'));
pg_database_size
------------------7594499
(1 行记录)
pg_size_pretty() #函数将字节装维更容易阅读值
postgres=# selsct pg_size_pretty(pg_database_size('mydb'));
pg_size_pretty
------------------7417 kB
(1 行记录)

数据表操作

列出表

列出表的常用方法:

mydb=# \dt;

列出表(显示search_path中模式里的表,默认public)

mydb=# \d;

列出表视图和序列

mysb=# \d+;
mydb=# \dt my_schema.*

列出制定模式下的表(例如 my_schema)

mydb=# \dt *.*

查看当前数据库的所有表(包括系统表)

mydb=# select * from pg_table where schmaname = 'public';

使用SLQL方式列出当前数据库中 public 模式下所有表及其详细信息pg_tables 是视图: 属于 pg_catalog 模式,但它是基于 pg_class 和pg_namespace 的逻辑视图,并费物理表。无需切换数据库,直接查询pg_catalog.pg_tables 即可获取数据库的表信息

创建表

PostgrsSQL支持标准的SQL类型int、 smallint、real、double precision、char(N)、varchar(N)、data、time、timestamp和interval,还支持其他的通用功能的类型和丰富的几何类型。PostgreSQL中可以定制任意数量的用户定义数据类型。因而类型名并不是语法关键字,除了SQL标准要求的支持例外。

postgres=# cerate table test(id int,name char(10),age int);
CREATE TABLE

复制表

要将已有的 table_name 表复制为新表 naw_table,包括表结构和数据,请使用以下语句

create table new_table as table table_name;

例如:

postgres+# create table test2 as table test;
SELECT 0
postgres=# \dt关联列表
架构模式 |   名称   |   类型  |  拥有者 
---------+---------+---------+----------
hr       |employes | 数据表  | postgres
hr       |test     | 数据表  | postgres
hr       |test2    | 数据表  | postgres
(3 行记录)

删除表

postgres=# drop table test2;

查看表结构

postgres=# \d trst;数据表"hr.test"栏位  |      类型      | 校规规则 | 可空的 | 预设
------+----------------+---------+--------+------
id    | integer        |         |        |
name  | character (10) |         |        |
age   | integer        |         |        |

模式操作命令

在PostgreSQL 中,模式(SChema) 是一个逻辑容器,用于组织和管理数据库对象(如表、视图 、函数、索引等)。它类似文件系统中的文件夹,帮助你在同一个数据库中储存不同的对象,避免命名冲突,并实现权限隔离

创建模式

在当前库postgres 中创建名为 hr 的模式

postgres=# create schema hr;
CREATE SCHEMA

默认模式

PostgreSQL 每个数据库都有一个默认模式public。如果创建对象(表、视图等)时不能指定模式,弄人会放在public模式中

通过search_path参数可以设置模式的搜索优先级(类似PATH环境变量):

postgres=# show search_path;search_path
------------------
"$user", pubilc
(1 行记录)

search_path 用于控制对象解析顺序,避免酶促查询都要写模式名

$user,public 表示优先查找当前用户同名模式,再找public 模式。

删除模式

删除空模式

postgres=# drop schema hr;
DROP SCHEMA

墙纸删除模式及其所有对象

postgres=# \dn架构模式列表名称   |       拥有者
--------+-------------------
public  | pg_database_owner
(1 行记录)

SQL查询,列出当前苦衷所有模式

postgres=# select shema_name from information_schemata;schema_name
--------------------
information_schema
pg_catalog
pg_toast
public
(4 行记录)

在制定模式中创建表

未指定模式时,创建的对象(表,视图等)会按照search_path 孙旭创建到第一个可用的模式中

在postgres库中的hr模式下创建一个名为employees的库

postgres=# vreate hr.employees (id serial primary key,name text);

切换当前模式

切换到单个 schema

set search_path to new_schema;

切换到多个schema(按优先级顺序)

set search_path to hr,public;

表示优先级搜索hr模式,其次public

查看当前所在schema

postgres=# selsct surent_schema();current_schema
----------------
hr
(1 行记录)

查看搜索路径(Search  Path)

postgres=# show search_path;search_path
--------------
hr, public
(1 行记录)

PostgreSQL的模式隔离性

PostreSQL 的模式是数据库内的逻辑分组,不同模式可以在同名比表。这也是和mysql的不同之处

跨模式查询需显示指定模式名(如 schemal. users),或通过search_path 设置默认模式

无需切换数据库连接,所有操作在同一数据库内完成

创建一个数据库

创建数据库mydb

postgres=# create database mydb;

切换到mydb

postgres=# \c mydb

在数据库中创建两个模式

创建模式schema1 和 schema2

mydb=# create schema schema1;
mydb=# create schema schema2;

在每个模式中创建同名表,并插入数据

在schema1 中创建users表

mydb=# creath table schema2.users (id int);
mydb=# insert into schemal.users values(1);

在schema1 中创建同名users表

mydb=# create table schema2.users (id int);
mydb=# insert into schema2.users valuse(2);

跨模式查询

查询schema1.users 和 schema2.users (需要制定模式名命名)

mydb=# select * from schema1.users;
mydb=# secect * from schema2.users;

设置search.users_path 切换默认模式(不许呀制定模式名)

mydb=# set search_path to schemal;
mydb=# select * from users;  --默认访问schema1.users
mydb=# set search_path to schema2;
mydb=# select * from users;  --默认访问schema2.users

数据操作

添加数据

在postgres库,新建表test

postgres=# create table teat (id int,name char(10),age int);
CREATE TABLE
postgres=# insert into test caluse(1,'zhangsan' ,18);
INSERT 0 1

查询数据

postgres=# select * from test;id  |    name     | age
----+-------------+------
1   | zhangsan    |  18
(1 行记录)

修改数据

postgres=# update test set age=20 where id=1;
UPDATE 1
postgres=# select * from test;id |     name    | age
---+-------------+-----
1  | zhangsan    | 20
(1 行记录)

删除数据库

mydb=# delet from test where id=1;
DELETE 1
mydb=# select * from test;id  |    name     | age
------+-------------+------
(0 行记录)

备份与恢复

备份方法描述优点缺点常用命令/工具
SQL 转储使用 pg_dump 或 pg_dumpall 生成 SQL 脚本或归档文件,包含数据库结构和数据。- 可恢复单个表或数据库
- 跨版本兼容性好
- 支持压缩和自定义导出格式
- 大型数据库备份较慢
- 恢复时需重新执行 SQL,可能耗时较长
pg_dump -U user -d dbname -f backup.sql
文件系统级备份直接复制 PostgreSQL 的数据目录文件(需确保数据库处于一致状态)。- 备份速度快
- 适合大型数据库
- 需停止服务或使用快照
- 恢复时需保持相同 PostgreSQL 版本和配置
rsync 或文件系统快照工具(如 LVM、ZFS)
连续归档结合 WAL(预写式日志)归档和基础备份,支持时间点恢复(PITR)。- 支持增量备份
- 可精确恢复到任意时间点
- 几乎不影响生产性能
- 配置复杂
- 需要额外存储空间管理 WAL 文件
pg_basebackup + archive_command 配置
6.1 SQL转储

• c(自定义归档)
• d(目录格式)
• t(tar 格式)
pg_dump -F c dbname -f backup.dump
压缩输出直接压缩备份文件(-Z 选项)pg_dump dbname | gzip > backup.sql.gz
指定表/模式仅备份特定表或模式:
• -t table(单表)
• -n schema(整个模式)
pg_dump -t users -t orders dbname > partial.sql
远程备份从远程服务器备份(-h 主机,-p 端口)pg_dump -h 192.168.1.100 -p 5432 dbname > remote_backup.sql
认证方式指定用户名(-U)或使用环境变量(PGUSERpg_dump -U postgres dbname > backup.sql
并行备份使用多线程加速(-j 选项,仅适用于 -F d 目录格式)pg_dump -F d -j 4 dbname -f backup_dir
仅结构/仅数据选择性备份:
• -s(仅结构)
• -a(仅数据)
pg_dump -s dbname > schema_only.sql
恢复备份使用 psql 或 pg_restore(取决于备份格式)psql -U postgres -d newdb < backup.sql
pg_restore -d newdb backup.dump
从转储中恢复
类别说明示例
基本恢复(SQL 格式)使用 psql 恢复纯文本 SQL 备份psql -U postgres -d dbname < backup.sql
强制错误停止遇到错误时停止恢复(ON_ERROR_STOPpsql --set ON_ERROR_STOP=on -d dbname < backup.sql
事务模式恢复将整个恢复作为单个事务(失败则完全回滚)psql -1 -d dbname < backup.sql
恢复自定义/目录格式使用 pg_restore 恢复非纯文本备份(如 -F c-F d 格式)pg_restore -U postgres -d dbname backup.dump
跨服务器直接恢复通过管道直接从源服务器转储并恢复到目标服务器pg_dump -h host1 dbname | psql -h host2 dbname
恢复前准备需手动创建空数据库(建议基于 template0createdb -T template0 -U postgres dbname
恢复后优化执行 ANALYZE 更新统计信息psql -U postgres -c "ANALYZE;" dbname
权限与用户要求恢复前需确保原用户和权限已存在,否则对象归属可能丢失需提前创建用户:
CREATE ROLE original_owner LOGIN;
部分恢复选项选择性恢复表或数据(仅适用于 pg_restorepg_restore -t table_name -d dbname backup.dump
使用 pg_dumpall
类别说明示例
基本用法备份整个 PostgreSQL 集群(所有数据库 + 全局对象)pg_dumpall > full_backup.sql
仅备份全局对象只备份角色、表空间等集群级信息(不包含数据库数据)pg_dumpall --globals-only > globals.sql
恢复整个集群使用 psql 恢复完整集群备份(需超级用户权限)psql -f full_backup.sql postgres
备份到自定义文件指定输出文件路径pg_dumpall -f /path/to/backup.sql
包含表空间定义备份时会包含表空间信息(需确保目标服务器路径匹配)自动包含,恢复时需检查路径有效性
并行备份(间接)通过结合 pg_dump 并行备份单个数据库(pg_dumpall 本身不支持并行)需手动编写脚本结合 pg_dump -j N
过滤系统对象排除系统数据库(如 template0template1pg_dumpall --exclude-database="template*"
压缩备份直接生成压缩备份pg_dumpall | gzip > full_backup.sql.gz
恢复后验证检查恢复的数据库和全局对象psql -c "\l" 和 psql -c "\du"

远程链接

修改PostgreSQL 监听地址

  默认 PostgreSql 监听的地址是 127.0.0.1,别的机器无法远程连接上,所以需要调整,修改 postgresql.conf 文件。
通过 dnf 安装的pgsql配置文件在

/var/lib/pgsql/data/postgresql.conf

通过源码编译安装的 pgsql配置文件在

/usr/local/pgsql/data/postgresql.conf

下面操作以 dnf 安装为例:
更改第60行,取消注释并把localhost改成*

listen_addresses = '*'

重启服务

配置访问权限

     默认是只能本地访问 PostgreSQ 的,我们需要在 pg_hba.conf 里面配置

找到 IPv4 local connections 这一行,在这一行下面添加

hostall                            all                       0.0.0.0/0                         trust

配置项    含义说明
host    指定连接类型,host 表示适用于 TCP/IP 远程连接;本地连接常用 local
all(数据库规则)    定义规则适用的数据库范围,all 表示所有数据库,也可指定如 mydatabase 等特定数据库名
all(用户规则)    定义规则适用的用户范围,all 表示所有用户,也可指定如 myuser 等特定用户名
0.0.0.0/0    定义可接受规则的客户端 IP 地址或范围,0.0.0.0/0 表示任意 IP 地址(无限制 ),也可指定具体 IP(如 192.168.1.100 )或网段(如 192.168.1.0/24 )
trust    认证方法,trust 表示无需密码等认证可直接连接,仅适合本地 / 受信网络环境(开发、测试场景 ),生产环境建议用更安全的如 scram-sha-256 等认证方式
如果不是设置的trust,而是选择了md5或password之类的,需要有密码才行,配置 PostgreSQL密码流程如下

重启服务
[root@localhost]#systemctl start postgresql
验证远程连接

使用其它主机远程连接本机数据库,设置的是trust,无密码,可直接登录

[postgres@localhost~]$ psql -h 192.168.10.101
psql(16.3,server 15.12)
Type "help" for help.
postgres=#

如果设置的是 md5 或 password 之类的需要有密码才行

[postgres@localhost ~]$ psql -h 192.168.10.101
Password for user postgres:
psql(16.3,server 15.12)
Type "help" for help.postgres=#

重置密码
 

在 PostgreSQL 中如果密码忘记了怎么重置密码
 

8.1备份配置文件

对 pg_hba.conf 文件,进行备份

[root@localhost ~]# vim /var/lib/pgsql/data/postgresql.conf
# IPv4 local connections:
host      all          al1                  127.0.0. 1/32         trust
host      all          all                  0.0.0.0/0             md5
重启服务
[root@localhost ~]# systemctl restart postgresql
修改密码

登录数据库修改密码,密码自定义

postgres=# ALTER USER postgres WITH PASSWORD 'new_password';
ALTER ROLEpostgres=# ALTER USER postgres WITH PASSWORD 'new_password';
ALTER ROLE
 恢复 pg_hba.conf 配置文件

将 postgresql.confbak 文件的内容覆盖 pg_hba.conf,重启 PostgreSQlL数据库服务器,重新登陆时,如果提示输入密码,则输入刚才修改的密码即可

对象型数据库与实体关系型数据库的比较与选择

对象型数据库(Object-Oriented Database, OODB)的定义
对象型数据库是一种基于面向对象编程模型的数据库管理系统,它将数据和操作数据的方法(函数或过程)封装为一个完整的 “对象”,并按照面向对象的概念(如类、继承、多态等)组织和管理数据。

  • 核心思想:直接存储和管理对象(如编程语言中的对象实例),避免传统关系型数据库中 “对象 - 关系” 映射的复杂性,适用于处理复杂数据结构(如图形、多媒体、复杂业务逻辑等)

对象型数据库的主要特征

面向对象的数据模型

  • 对象封装:数据(属性)和操作(方法)被封装在对象中,例如一个 “学生” 对象包含姓名、年龄等属性,以及计算成绩的方法。
  • 类与继承:通过 “类” 定义对象的模板,子类可继承父类的属性和方法,减少代码冗余。例如,“本科生” 类继承 “学生” 类的基本属性,并添加特有的属性(如专业方向)。
  • 多态性:不同类的对象可对同一消息(方法调用)做出不同响应,提高系统灵活性。

支持复杂数据类型
  • 可直接存储非结构化或半结构化数据,如文本、图像、音频、视频、嵌套对象(对象中包含其他对象)等,无需转换为关系型数据库的二维表结构。

强类型与模式动态性

  • 强类型:对象的属性和方法在类定义中严格声明,确保数据一致性。
  • 模式动态性:允许在运行时修改类的结构(如添加属性或方法),适应需求变化频繁的场景(如软件开发过程中的迭代)。

高效的对象操作

  • 支持直接通过对象标识符(OID)访问对象,避免传统关系型数据库中复杂的连接(JOIN)操作,提升查询效率,尤其适用于处理大量关联对象的场景。

 与编程语言无缝集成

  • 通常与面向对象编程语言(如 Java、C++)深度集成,可直接操作数据库中的对象,减少数据转换开销。

对象型数据库与实体关系型数据库(ERDB)的区别

对比维度

对象型数据库(OODB

实体关系型数据库(ERDB

数据模型

基于面向对象模型(对象、类、继承)

基于关系模型(表、行、列、键)

数据结构

支持复杂对象(嵌套对象、自定义类型)

结构化数据(二维表,需拆分为简单字段)

数据与行为

数据与操作(方法)封装在对象中

数据(存储在表中)与操作(SQL 语句)分离

模式灵活性

动态模式,可运行时修改类结构

静态模式,修改表结构需通过 DDL 语句

查询方式

通过对象标识符(OID)或对象查询语言(OQL)

使用 SQL 语句,需通过 JOIN 处理关联数据

适用场景

复杂数据类型(如多媒体、CAD 设计、生物信息)、面向对象应用开发

结构化数据管理(如金融交易、企业资源计划)

性能特点

适合处理对象间的复杂关联和频繁更新

适合处理大规模结构化查询和事务一致性

典型产品

MongoDB(文档型数据库,部分面向对象特性)、ObjectDB、Versant

Oracle、MySQL、SQL Server

相关文章:

  • 免费开源的微信开发框架
  • 深度学习小项目合集之图像分割识别-视频介绍下自取
  • 【AI智能体】Coze 数据库从使用到实战操作详解
  • MySQL 8配置文件详解
  • JavaEE-发展历史
  • 使用 C++ 和 OpenCV 构建智能答题卡识别系统
  • 编程学习网站大全(C++/OpenCV/QT方向)—— 资源导航与深度评测
  • 【Lua热更新知识】学习三 XLua学习
  • JavaEE-SpringBoot
  • JavaEE-Maven
  • Leetcode-11 2 的幂
  • 解决华为云服务器无法ping通github问题
  • 智能体商业化:创建-接入-封装成小程序/网站/H5
  • 第二部分-静态路由实验
  • 聊天室项目多进程纯C版
  • 公司网络变差的解决方法(固定IP地址冲突)
  • 关于界面存在AB测试后UI刷新空白的问题
  • Redis:set类型和zset类型
  • 汽车制造通信革新:网关模块让EtherCAT成功对接CCLINK
  • gitlab相关操作
  • 珠宝营销型网站/口红的推广软文
  • 百度公司做网站可靠吗/seo行业网
  • 编辑网站在线注册系统/在哪个平台做推广比较好
  • 网站关键词如何优化/湖南企业竞价优化首选
  • 官方网站制作思路/百度关键词分析工具
  • 贵阳网站制作cncolour/网站建设网站