PostgreSQL日常维护

目录

一、PostgreSQL 概述

二、基本使用

(一)登录数据库

(二)数据库操作

1. 列出数据库

2. 创建数据库

3. 删除数据库

4. 切换数据库

5. 查看数据库大小

(三)数据表操作

1. 列出表

2. 创建表

3. 复制表

4. 删除表

5. 查看表结构

三、模式操作命令

(一)创建模式

(二)在指定模式中创建表

(三)切换当前模式

(四)查看当前所在 schema

(五)查看搜索路径(Search Path)

(六)PostgreSQL 的模式隔离性

四、数据操作

(一)添加数据

(二)查询数据

(三)修改数据

五、备份与恢复

(一)备份

(二)从转储中恢复

六、远程连接 PostgreSQL

(一)配置访问权限

(二)重启服务

(三)验证远程连接

七、重置密码

(一)备份配置文件

(二)修改配置文件

(三)重启服务

(四)修改密码

(五)恢复 pg_hba.conf 配置文件

 


 

一、PostgreSQL 概述

PostgreSQL(简称 pgsql)是一款功能强大的开源关系型数据库,具备稳定性、扩展性以及对 SQL 标准的严格遵循等显著特点。这些优势使其在企业级开发与数据分析场景中得到广泛应用。本笔记将围绕 pgsql 的日常使用展开,涵盖从基础登录到核心操作的完整流程,助力读者掌握数据库连接管理、库表创建与操作、模式(Schema)设计、远程访问权限配置以及账户安全维护等关键技能。

二、基本使用

(一)登录数据库

在登录 PostgreSQL 时,必须使用 postgres 用户。具体操作步骤如下:

[root@bogon ~]# su -- postgres  # 切换到 postgres 用户
[postgres@bogon ~]$ /usr/local/pgsql/bin/psql  # 启动 psql 客户端

 

登录成功后,命令提示符将变为 “postgres=#”,其中 “postgres” 表示当前所在的数据库。

(二)数据库操作

1. 列出数据库

在 PostgreSQL 中,有三种常用的列出数据库的方法:

 

  • 方法一:使用元命令 \l
    在 psql 交互式终端中,以 “\” 开头的命令称为元命令,类似 MySQL 的 SHOW 语句,可用于快速管理数据库。输入 “\l” 即可列出所有数据库。
  • 方法二:使用扩展元命令 \l+
    “\l+” 的输出比 “\l” 多了 Size、Tablespace 和 Description 列,能提供更详细的数据库信息。输入 “\l+” 即可查看扩展后的数据库列表。
  • 方法三:使用 SQL 命令
    通过查询系统表 pg_database 来获取所有数据库的信息,SQL 语句如下:
    postgres=# SELECT datname FROM pg_database;
    

    pg_database 是系统表,存储了 PostgreSQL 实例中所有数据库的元信息,如数据库名称、所有者、编码等。它属于系统目录(System Catalog),类似 MySQL 的 information_schema,但 PostgreSQL 的系统目录更底层且直接存储在 pg_catalog 模式中。由于系统表默认属于 pg_catalog 模式,且 pg_catalog 始终位于搜索路径(search_path)的首位,因此查询时无需显式指定模式。

2. 创建数据库

使用 CREATE DATABASE 语句创建新的数据库,示例如下:

postgres=# create database mydb;

3. 删除数据库

若要删除不再需要的数据库,可使用 DROP DATABASE 语句,示例如下:

postgres=# drop database mydb;

4. 切换数据库

在 psql 中,使用 \c 元命令切换当前连接的数据库,示例如下:

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

5. 查看数据库大小

  • 使用 pg_database_size 函数以字节为单位返回数据库的大小,示例如下:
    postgres=# SELECT pg_database_size('mydb');
    
  • 使用 pg_size_pretty () 函数将字节转换为更易于阅读的值,示例如下:
    postgres=# SELECT pg_size_pretty(pg_database_size('mydb'));
    

(三)数据表操作

1. 列出表

在 PostgreSQL 中,有多种列出表的方法:

 

  • 使用元命令 \dt:列出当前数据库中 search_path 中模式里的表(默认 public 模式),示例如下:
    mydb=# \dt;
    
  • 使用元命令 \d:列出表、视图和序列,示例如下:
    mydb=# \d
    
  • 使用元命令 \d+:列出更详细的表信息,示例如下:
    mydb=# \d+
    
  • 使用元命令 \dt my_schema.*:列出指定模式下的表(例如 my_schema),示例如下:
    mydb=# \dt my_schema.*
    
  • 使用元命令 \dt .:查看当前数据库的所有表(包括系统表),示例如下:
    mydb=# \dt *.*
    
  • 使用 SQL 命令:通过查询 pg_tables 视图列出当前数据库中指定模式下的所有表及其详细信息,pg_tables 属于 pg_catalog 模式,是基于 pg_class 和 pg_namespace 的逻辑视图,并非物理表。无需切换数据库,直接查询 pg_catalog.pg_tables 即可获取当前数据库的表信息,示例如下:
    mydb=# SELECT * FROM pg_tables WHERE schemaname = 'public';
    

2. 创建表

PostgreSQL 支持标准的 SQL 类型,如 int、smallint、real、double precision、char (N)、varchar (N)、date、time、timestamp 和 interval 等,还支持其他通用功能的类型和丰富的几何类型,并且可以定制任意数量的用户定义数据类型。创建表的示例如下:

postgres=# create table test(id int, name char(10), age int);

3. 复制表

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

CREATE TABLE new_table AS TABLE table_name;

 

例如,将 test 表复制为 test2 表:

postgres=# CREATE TABLE test2 AS TABLE test;

4. 删除表

使用 DROP TABLE 语句删除表,示例如下:

postgres=# drop table test2;

5. 查看表结构

使用 \d 元命令查看表结构,示例如下:

postgres=# \d test;

 

输出结果将显示表的栏位、类型、校对规则、可空性和预设值等信息。

三、模式操作命令

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

(一)创建模式

在当前库 postgres 中创建名为 hr 的模式,示例如下:

postgres=# CREATE SCHEMA hr;

(二)在指定模式中创建表

未指定模式时,创建的对象(表、视图等)会按 search_path 顺序创建到第一个可用的模式中。在 postgres 库中的 hr 模式下创建一个名为 employees 的表,示例如下:

postgres=# CREATE TABLE hr.employees (id SERIAL PRIMARY KEY, name TEXT);

(三)切换当前模式

切换模式也就是调整 search_path 的搜索范围。

 

  • 切换到单个 schema,示例如下:
    SET search_path TO new_schema;
    
  • 切换到多个 schema(按优先级顺序),示例如下:
    SET search_path TO hr, public;
    

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

(四)查看当前所在 schema

使用 current_schema () 函数查看当前所在的 schema,示例如下:

postgres=# SELECT current_schema();

(五)查看搜索路径(Search Path)

使用 SHOW search_path 命令查看当前的搜索路径,示例如下:

postgres=# SHOW search_path;

(六)PostgreSQL 的模式隔离性

PostgreSQL 的模式是数据库内的逻辑分组,不同模式可以存在同名表,这是与 MySQL 的不同之处。跨模式查询需显式指定模式名(如 schemal.users),或通过 search_path 设置默认模式,无需切换数据库连接,所有操作在同一数据库内完成。以下是一个跨模式查询的示例:

 

  1. 创建一个数据库 mydb,并切换到该数据库:
    postgres=# CREATE DATABASE mydb;
    postgres=# \c mydb
    
  2. 在数据库中创建两个模式 schemal 和 schema2:
    mydb=# CREATE SCHEMA schemal;
    mydb=# CREATE SCHEMA schema2;
    
  3. 在每个模式中创建同名表,并插入数据:
    mydb=# CREATE TABLE schemal.users (id int);
    mydb=# INSERT INTO schemal.users VALUES(1);
    mydb=# CREATE TABLE schema2.users (id int);
    mydb=# INSERT INTO schema2.users VALUES(2);
    
  4. 跨模式查询:
    • 显式指定模式名查询:
      mydb=# SELECT * FROM schemal.users;
      mydb=# SELECT * FROM schema2.users;
      
    • 设置 search_path 切换默认模式查询:
      mydb=# SET search_path TO schemal;
      mydb=# SELECT * FROM users; -- 默认访问 schemal.users
      mydb=# SET search_path TO schema2;
      mydb=# SELECT * FROM users; -- 默认访问 schema2.users
      

四、数据操作

(一)添加数据

在 postgres 库中新建表 test,并插入数据,示例如下:

postgres=# create table test(id int, name char(10), age int);
postgres=# insert into test values(1,'zhangsan', 18);

(二)查询数据

使用 SELECT 语句查询表中的数据,示例如下:

postgres=# select * from test;

(三)修改数据

使用 UPDATE 语句修改表中的数据,示例如下:

postgres=# update test set age=20 where id=1;

五、备份与恢复

(一)备份

pg_dump 是 PostgreSQL 中用于备份数据库的工具。它可以备份整个数据库、单个模式或单个表。以下是使用 pg_dump 备份数据库的基本命令:

pg_dump -U username -h host -p port dbname > dumpfile

 

其中:

 

  • -U username:指定连接数据库的用户名。
  • -h host:指定数据库服务器的主机名或 IP 地址。
  • -p port:指定数据库服务器的端口号。
  • dbname:指定要备份的数据库名称。
  • dumpfile:指定备份文件的名称和路径。

 

如果没有足够的特权来备份整个数据库,仍然可以使用诸如 -n schema 或 -t table 选项来备份该数据库中能够访问的部分。例如,备份指定模式 schema1 中的数据:

pg_dump -U postgres -h localhost -p 5432 mydb -n schema1 > schema1_backup.sql

 

要声明 pg_dump 连接哪个数据库服务器,使用命令行选项 -h host 和 -p port。默认主机是本地主机或 PGHOST 环境变量指定的主机,默认端口是环境变量 PGPORT 或(如果 PGPORT 不存在)内建的默认值。pg_dump 默认使用与当前操作系统用户名同名的数据库用户名进行连接,要使用其他名字,要么声明 -U 选项,要么设置环境变量 PGUSER。请注意,pg_dump 的连接也要通过客户认证机制。

 

pg_dump 对于其他备份方法的一个重要优势是,其输出可以很容易地在新版本的 PostgreSQL 中载入,而文件级备份和连续归档都是极度的服务器版本限定的。pg_dump 也是唯一可以将一个数据库传送到一个不同机器架构上的方法,例如从一个 32 位服务器到一个 64 位服务器。由 pg_dump 创建的备份在内部是一致的,也就是说,转储表现了 pg_dump 开始运行时刻的数据库快照,且在 pg_dump 运行过程中发生的更新将不会被转储。pg_dump 工作的时候并不阻塞其他的对数据库的操作(但是会阻塞那些需要排它锁的操作,比如大部分形式的 ALTER TABLE)。

(二)从转储中恢复

pg_dump 生成的文本文件可以由 psql 程序读取。从转储中恢复的常用命令是:

psql dbname < dumpfile

 

其中 dumpfile 就是 pg_dump 命令的输出文件。这条命令不会创建数据库 dbname,必须在执行 psql 前自己从 template0 创建(例如,用命令 createdb -T template0 dbname)。psql 支持类似 pg_dump 的选项用以指定要连接的数据库服务器和要使用的用户名。非文本文件转储可以使用 pg_restore 工具来恢复。

 

在开始恢复之前,转储库中对象的拥有者以及在其上被授予了权限的用户必须已经存在。如果它们不存在,那么恢复过程将无法将对象创建成具有原来的所属关系以及权限(有时候这就是所需要的,但通常不是)。

 

默认情况下,psql 脚本在遇到一个 SQL 错误后会继续执行。如果希望在遇到一个 SQL 错误后让 psql 退出,那么可以设置 ON_ERROR_STOP 变量来运行 psql,这将使 psql 在遇到 SQL 错误后退出并返回状态 3,示例如下:

psql --set ON_ERROR_STOP=on dbname < infile

六、远程连接 PostgreSQL

(一)配置访问权限

默认情况下,PostgreSQL 只能本地访问,要允许远程连接,需要在 pg_hba.conf 配置文件中进行配置。找到 IPv4 local connections 这一行,在这一行下面添加以下内容:

host all all 0.0.0.0/0 trust

 

其中:

 

  • host:指定连接类型,host 表示该规则适用于通过 TCP/IP 进行的远程连接,如果是本地连接,通常会使用 local。
  • all:定义哪些数据库可以接受这个规则,all 表示适用于所有数据库,也可以指定特定的数据库名。
  • all:定义哪些用户可以接受这个规则,all 表示适用于所有用户,也可以指定特定的用户名。
  • 0.0.0.0/0:定义哪些客户端 IP 地址或 IP 地址范围可以接受这个规则,0.0.0.0/0 表示任何 IP 地址(即没有 IP 地址限制),也可以指定具体的 IP 地址或 IP 地址范围。
  • trust:定义认证方法,trust 表示不需要密码或其他任何形式的认证,客户端可以直接连接。这通常只在本地或受信任的网络环境中使用,因为它允许任何人无需认证即可访问数据库,在生产环境中,应该使用更安全的认证方法,如 md5 或 password(对于较新版本的 PostgreSQL,建议使用 scram-sha-256)。

 

如果选择使用 md5 或 password 等需要密码的认证方法,需要先为用户设置密码,示例如下:

postgres=# ALTER USER postgres WITH PASSWORD '123456';

(二)重启服务

配置完 pg_hba.conf 文件后,需要重启 PostgreSQL 服务,使配置生效,示例如下:

[root@localhost ~]# systemctl start postgresql

(三)验证远程连接

使用其它主机远程连接本机数据库,根据配置的认证方法不同,操作也有所不同:

 

  • 如果设置的是 trust 认证方法,无需密码可直接登录,示例如下:
    [postgres@localhost ~]$ psql -h 192.168.10.102
    
  • 如果设置的是 md5 或 password 等需要密码的认证方法,登录时需要输入密码,示例如下:
    [postgres@localhost ~]$ psql -h 192.168.10.102
    Password for user postgres:
    

七、重置密码

如果忘记了 PostgreSQL 的密码,可以通过以下步骤重置密码:

(一)备份配置文件

对 pg_hba.conf 文件进行备份,示例如下:

[root@localhost ^]# cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.confbak

(二)修改配置文件

修改配置文件以信任本地连接不需要密码,将配置文件中的认证方法(如 scram-sha-256 或者 md5)修改为 trust,示例如下:

[root@localhost ^]# vim /var/lib/pgsql/data/pg_hba.conf
# IPv4 local connections:
host all all 127.0.0.1/32 trust

(三)重启服务

修改完配置文件后,重启 PostgreSQL 服务,示例如下:

[root@localhost ^]# systemctl restart postgresql

(四)修改密码

登录数据库修改密码,密码自定义,示例如下:

postgres=# ALTER USER postgres WITH PASSWORD 'new_password';

(五)恢复 pg_hba.conf 配置文件

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广东省省考备考(第十六天5.21)—言语:语句排序题(听课后强化)

错题 解析 对比选项&#xff0c;确定首句。①句介绍目前人类可以利用一些技术手段进入元宇宙&#xff0c;凭借网络重新定义自己&#xff0c;体验一种全新的生活&#xff0c;②句介绍对于多数人来说&#xff0c;首先要弄清楚什么是元宇宙&#xff0c;③句介绍元宇宙是指超越现实…

高并发架构设计之限流

一、引言 再强大的系统&#xff0c;也怕流量短事件内集中爆发&#xff0c;就像银行怕挤兑一样&#xff0c;所以&#xff0c;高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量&#xff0…

视频监控联网系统GB28181协议中设备控制流程详解

文章目录 9.3 设备控制9.3.1 基本要求9.3.2 命令流程9.3.2.1 无应答命令流程 9.3.3 协议接口9.3.3.1 请求命令9.3.3.2 应答命令 智联视频超融合平台介绍 9.3 设备控制 9.3.1 基本要求 控制满足以下基本要求&#xff1a; a) 源设备向目标设备发送控制命令&#xff0c;控制命令…

深入剖析原型模式:原理、实现与应用实践

在软件开发的世界里,设计模式如同建筑师手中的蓝图,为复杂系统的构建提供了行之有效的解决方案。其中,原型模式(Prototype Pattern)作为创建型设计模式的重要一员,以其独特的对象创建方式,在提高代码复用性、增强系统灵活性等方面发挥着关键作用。本文将深入剖析原型模式…

图绘Linux:基础指令脉络阁

目录 Linux命令行介绍 目录操作 ls 目录所含文件信息 ls 常用选项 pwd 在那个目录下 cd 进入目录 mkdir 创建目录 文件操作 touch 创建普通文件 echo向文件写入 cat 输出文件内容 cp 拷贝文件/目录 mv剪切重命名 rm 删除文件/目录 查找 * 匹配符 man 查找指令 …

数据分析 —— 数据预处理

一、什么是数据预处理 数据预处理&#xff08;Data Preprocessing&#xff09;是数据分析和机器学习中至关重要的步骤&#xff0c;旨在将原始数据转换为更高质量、更适合分析或建模的形式。由于真实世界的数据通常存在不完整、不一致、噪声或冗余等问题&#xff0c;预处理可以…

【Redis】哨兵(Sentinel)机制

文章目录 1. Redis Sentinel的概念1.1 基本概念1.2 引出高可用 2. Redis Sentinel的部署&#xff08;基于docker&#xff09;2.1 部署2.2 验证2.3 选举流程 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要人工进行主从切换&#xff0c;同时…

初识Linux · 五种IO模型和非阻塞IO

目录 前言&#xff1a; 五种IO模型 什么是IO IO模型 非阻塞IO 前言&#xff1a; 前文我们已经将网络的基本原理介绍完了&#xff0c;都是通过围绕TCP/IP四层协议&#xff0c;将应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层全部介绍完毕&#xff0c…

Node.js 24发布:性能与安全双提升

在科技的迅速发展中&#xff0c;Node.js作为一个备受青睐的开源跨平台Java运行环境&#xff0c;近日迎来了其24.0版本的正式发布。此次更新不仅承诺提升性能和安全性&#xff0c;还为开发者提供了更为顺畅的开发体验&#xff0c;值得我们深入探讨。 Node.js 24.0的最大亮点之一…

SLAM文献之-SuperOdometry: Lightweight LiDAR-inertial Odometry and Mapping

《Super Odometry: IMU-centric LiDAR-Visual-Inertial Estimator for Challenging Environments》是一篇旨在增强 SLAM 系统在恶劣环境下鲁棒性的工作&#xff0c;尤其关注尘雾、烟雾等遮挡条件下的鲁棒估计。下面从算法原理、公式推导、创新点和应用场景四个方面进行详细解析…

指令烧录ORIN NANO操作系统

1 概述 模组为ORIN NANO 4GB版本 Ubuntu系统为18.04虚拟机 说明&#xff1a;刷机过程会有重新连接USB的操作&#xff0c;烧写过程需要注意虚拟机提示&#xff0c;官方不建议使用虚拟机&#xff0c;建议直接使用ubuntu操作系统的机器。 2 下载烧录所需文件 进入到下载网址&am…

游戏引擎学习第287天:加入brain逻辑

Blackboard&#xff1a;动态控制类似蛇的多节实体 我们目前正在处理一个关于实体系统如何以组合方式进行管理的问题。具体来说&#xff0c;是在游戏中实现多个实体可以共同或独立行动的机制。例如&#xff0c;我们的主角拥有两个实体组成部分&#xff0c;一个是身体&#xff0…

QML定时器Timer和线程任务WorkerScript

定时器 Timer 属性 interval: 事件间隔毫秒repeat: 多次执行&#xff0c;默认只执行一次running: 定时器启动triggeredOnStart: 定时器启动时立刻触发一次事件 信号 triggered(): 定时时间到&#xff0c;触发此信号 方法 restart(): 重启定时器start(): 启动定时器stop(): 停止…

Linux中的域名解析服务器

一、DNS&#xff08;域名系统&#xff09;详解 1. 核心功能与特点 特性说明核心作用将域名&#xff08;如 www.example.com&#xff09;转换为 IP 地址&#xff08;如 192.168.1.1&#xff09;&#xff0c;实现人类可读地址与机器可读地址的映射。端口与协议- 默认端口&#…

Springboot2

1、搭建环境 2、配置文件 application.properties application.yml 3、springboot接收请求 springspringmvc 接收请求 响应数据 4、springboot集成jdbc spring-boot-starter-jdbc.jar JdbcTemplate(update|query) 5、springboot自动装配原理&#xff08;重点&#x…

【课堂笔记】核方法和Mercer定理

文章目录 Kernal引入定义Mercer定理描述有限情形证明一般情形证明 Kernal 引入 在实际数据中常常遇到不可线性分割的情况&#xff0c;此时通常需要将其映射到高维空间中&#xff0c;使其变得线性可分。例如二维数据&#xff1a; 通过映射 ϕ ( x 1 , x 2 ) ( x 1 2 , 2 x 1…

谈谈未来iOS越狱或巨魔是否会消失

2024年10月的预测&#xff0c;先说结论&#xff1a; 巨魔iOS17.1消失概率为99%。 因为巨魔强依赖的漏洞就是一个签名漏洞&#xff0c;攻击面有限又经过2轮修复&#xff0c;第3次出现漏洞的概率极低。而越狱的话由于系统组件和服务较多&#xff0c;所以出现漏洞概率高攻击面多&…

根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能

1.选择月份范围 代码如下&#xff1a; <el-date-picker v-model"value" type"monthrange" align"right" unlink-panels range-separator"至"start-placeholder"开始月份" end-placeholder"结束月份" :picker-…

用户栈的高效解析逻辑

一、背景 在之前的博客 内核逻辑里抓取用户栈的几种方法-CSDN博客 里&#xff0c;介绍了使用内核逻辑进行用户栈的函数地址的抓取逻辑&#xff0c;但是并没有涉及如何解析出函数符号的逻辑。 就如perf工具一样&#xff0c;它也是分为两个步骤&#xff0c;一个步骤是内核态抓取…

vue3 el-table 行号

在 Vue 3 中&#xff0c;使用 Element Plus 的 <el-table> 组件来创建表格时&#xff0c;如果你想添加行号&#xff08;即每一行的编号&#xff09;&#xff0c;可以通过自定义列来实现。下面是如何实现的步骤&#xff1a; 1. 安装 Element Plus 首先&#xff0c;确保你…