文章目录
- [1 PostgreSQL 简介](#1 PostgreSQL 简介)
- [2 PostgreSQL 与 MySQL 的区别](#2 PostgreSQL 与 MySQL 的区别)
- [3 PostgreSQL 的安装](#3 PostgreSQL 的安装)
- [4 PostgreSQL的配置](#4 PostgreSQL的配置)
- [5 PostgreSQL 基本操作](#5 PostgreSQL 基本操作)
- [6 安装图形化界面](#6 安装图形化界面)
-
- [1_使用 pgAdmin(官方推荐)](#1_使用 pgAdmin(官方推荐))
- 2_DBeaver(多数据库通用)
- [3_DataGrip(JetBrains 出品)](#3_DataGrip(JetBrains 出品))
- [4_Navicat for PostgreSQL(商业)](#4_Navicat for PostgreSQL(商业))
- [7 总结](#7 总结)
1 PostgreSQL 简介
PostgreSQL 是一个功能强大、开源的对象-关系型数据库系统,以其可靠性、数据完整性、可扩展性而著称,底层使用 C 语言实现。
它采用与 Linux 内核相同的开源协议 ------ BSD 协议。
这一协议非常宽松,与 MIT 协议类似,允许你在遵守基础条款的前提下进行二次开发,甚至将其商业化并收费。
自 1986 年起由加州大学伯克利分校开始开发,PostgreSQL 目前在全球范围拥有活跃的社区和商业支持。
PostgreSQL 最初的前身是名为 Ingres 的数据库系统。
后来为了改进 Ingres 的架构并解决其存在的问题,开发者将新系统命名为 Postgres,意指 "Ingres 的后继者(Post-Ingres)"。
随后,为了强调其对 SQL 的支持,最终定名为 PostgreSQL。
PostgreSQL 拥有一个非常活跃的开源社区,通常每三个月会发布一个小版本,频繁的更新使得常见的 bug 能够被及时修复。
虽然 PostgreSQL 在国外应用广泛,但在国内目前仍以 MySQL 为主流。
不过,许多国产数据库产品都是基于 PostgreSQL 二次开发的,例如:
- 华为的 GaussDB
- 腾讯的 TBase
此外,许多企业从 Oracle 迁移数据库时,也选择 PostgreSQL 作为替代方案,各大云厂商(如阿里云、腾讯云、华为云)均已支持 PostgreSQL。
得益于开源生态,PostgreSQL 社区提供了大量的数据迁移工具,方便用户从其他数据库系统平滑迁移(pgloader)。
主要特性:
- 完整的 ACID 支持
- 支持复杂查询、并发控制、多版本并发控制(MVCC)
- 支持存储过程、触发器、自定义类型、扩展模块
- 原生 JSON/JSONB 支持,适合构建混合结构的数据系统
PostgreSQL 官方网站:https://www.postgresql.org/
PostgreSQL 中文社区:http://www.postgres.cn/index.php/v2/home
2 PostgreSQL 与 MySQL 的区别
技术没有好坏之分,主要看能否解决你的业务需求,其次查看社区的活跃度以及更新的频次。
对比项 | PostgreSQL 15 | MySQL 8.0 |
---|---|---|
数据类型 | 丰富(布尔、网络地址、XML、数组...) | 支持类型较基础 |
序列(Sequence)机制 | 支持 | 不支持 |
扩展性 | 高,支持扩展、插件、自定义操作符 | 较低 |
并发控制 | MVCC(40 亿事务版本号) | MVCC(不同的实现) |
高并发读写 | 性能指标强(极限负载) | 出现波峰后下滑 |
JSON 支持 | 原生 JSON/JSONB,强大查询功能 | 支持 JSON,但功能弱 |
同步复制机制 | 异步、同步 | 只支持异步 |
存储过程 | 支持多种语言(PL/pgSQL、Python、JavaScript 等) | 主要是 SQL 和最近支持的其他语言 |
适用场景 | 企业级复杂系统、GIS、大数据处理 | 轻量应用、Web 项目、CMS 系统 |
开源协议 | BSD 协议 | GPL 协议(严格) |
总结:MySQL 轻便易用,适合中小项目;PostgreSQL 功能强大,更适合对复杂业务和数据一致性有高要求的系统。
3 PostgreSQL 的安装
仅在Linux中尝试安装,不推荐大家在Windows下安装。
1_Linux部署
进入官网选择Linux和对应的发型商,比如我的是红帽系的系统:

点击后跳转到如下地址:https://www.postgresql.org/download/linux/redhat/
选择好对应的PostgreSQL版本、服务器型号和架构后将出现安装命令,直接复制即可。

命令如下(如果网络不好直接粘贴下面命令即可):
shell
# 下载PostgreSQL的rpm包
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL15的软件程序,需要下载,需要等一会,一般不会失败,即便失败,他也会重新帮你找镜像
sudo yum install -y postgresql15-server
# 数据库初始化
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
# 设置开启启动项,并设置为开启自行启动
sudo systemctl enable postgresql-15
# 启动PostgreSQL
sudo systemctl start postgresql-15
可能出现的问题:镜像不存在或镜像仓库问题(可以使用国内镜像源比如阿里镜像站)、插件等相关依赖不存在(配置 Epel 镜像即可解决)、端口占用、Linux网络问题等等。。。。
2_容器化部署
如果有docker直接运行如下命令即可:
shell
# 指定好容器名、用户、密码、默认数据库、容器内数据存放路径、端口号、卷挂载路径
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=postgres \
-e PGDATA=/var/lib/postgresql/data/pg_data \
-p 5432:5432 \
-v pg_data:/var/lib/postgresql/data/pg_data \
postgres:15
# 可以使用 docker volume inspect pg_data 查看挂载路径
# 默认在/var/lib/docker/volumes/pg_data/_data目录下
4 PostgreSQL的配置
要搞两个配置信息,关于PostgreSQL的远程连接配置以及PostgreSQL的日志配置。
配置文件通常位于:
shell
/var/lib/pgsql/<version>/data # version = 15
主要文件:
postgresql.conf
:设置端口、日志、连接数等pg_hba.conf
:配置客户端认证方式(local/host/md5/trust 等)
查看 data 目录下的所有配置文件
shell
ll /var/lib/pgsql/15/data

上图可以看到,postgreSQL的核心文件,都属于postgres用户,操作的时候,尽可能的别用root用户,容易玩出坑,尽可能先切换到postgres用户。
1_远程连接配置
PostgreSQL默认情况下不支持远程连接的,这个跟MySQL几乎一样。
也就是说PostgreSQL也要基于配置文件修改,才能制定用户是否可以远程连接。
直接去修改pg_hba.conf
配置文件,用户以及对应数据库和连接方式的编写模板

shell
# local:代表本地连接,host代表可以指定连接的ADDRESS
# database编写数据库名,如果写all,代表所有库都可以连接
# user编写连接的用户,可以写all,代表所有用户
# address代表那些IP地址可以连接
# method加密方式,这块不用过多关注,直接md5
# 直接来个痛快的配置吗,允许任意地址的全部用户连接所有数据库
host all all 0.0.0.0/0 md5

为了实现远程连接,除了用户级别的这种配置,还要针对服务级别修改一个配置,服务级别的配置在postgresql.conf
:

发现默认情况下,PostgreSQL只允许localhost
连接,直接配置为*
即可解决问题,为了生效,一定要记得重启PostgreSQL服务
shell
# postgres密码不管,直接root用户
sudo systemctl restart postgresql-15
2_配置数据库的日志
查看postgresql.conf
文件

PostgreSQL默认情况下,只保存7天的日志,循环覆盖。
shell
# 日志输出到标准错误中
log_destination = 'stderr'
# 代表日志是开启的。
logging_collector = on
# 日志存放的路径,默认放到当前目录下的log里
log_directory = 'log'
# 日志的文件名,默认是postgresql为前缀,星期作为后缀
log_filename = 'postgresql-%a.log'
# 一天一个日志文件
log_rotation_age = 1d
# 一个日志文件,没有大小限制
log_rotation_size = 0
# 默认一周过后,日志文件会被覆盖
log_truncate_on_rotation = on
3_设置数据库密码
默认的用户和密码配置
bash
sudo -u postgres psql
\password postgres
5 PostgreSQL 基本操作
由于当前PostgreSQL服务就在本机,所以直接执行以下命令
bash
# 切换到postgres用户
su postgres
# 进入 PostgreSQL 命令行
psql
使用 psql --help
,查看psql命令的完整参数如下:

PostgreSQL中类似于MySQL中的 DQL、DDL、DML 这些数据库级别的命令基本相同。
我们主要看一些PostgreSQL特有的服务级别的命令,常用命令如下:
sql
\dt -- 查看所有表
\l -- 查看所有数据库
\du -- 查看所有用户
\q -- 退出 psql
\? [commands] -- 显示反斜线命令的帮助
\? options -- 显示 psql 命令行选项的帮助
\? variables -- 显示特殊变量的帮助
\h [NAME] -- SQL命令语法上的说明,用*显示全部命令的语法说明
PostgreSQL默认会为我们生成三个库,如下

1_用户操作
构建用户命令巨简单
sql
-- 区别就是create user默认有连接权限,create role没有,不过可以基于选项去设置
CREATE USER 名称 [ [ WITH ] 选项 [ ... ] ]
create role 名称 [ [ WITH ] 选项 [ ... ] ]
构建一个超级管理员用户
sql
create user root with SUPERUSER PASSWORD 'root';

退出psql命令行

尝试使用root用户登录PostgreSQL命令行
shell
psql -h 192.168.200.129 -p 5432 -U root -W
# psql: 错误: 连接到"192.168.200.129"上的服务器,端口5432失败:FATAL: database "root" does not exist
发现,只有用户不让登录,用户需要有一个数据库,直接构建一个root库
sql
create database root; -- 使用postgre创建
可以在不退出psql的前提下,直接切换数据库\c database_name
:

也可以退出psql,重新基于psql命令去切换用户以及数据库。
如果要修改用户信息,或者删除用户,可以查看
sql
# 修改用户,直接基于ALTER命令操作
# 删除用户,直接基于DROP命令操作
如果要查看现在的全部用户信息

2_权限操作
权限操作前,要先掌握一下PostgreSQL的逻辑结构
逻辑结构图 |
---|
![]() |
可以看到PostgreSQL一个数据库中有多个schema,在每个schema下都有自己的相应的库表信息,权限粒度会比MySQL更细一些。
在PostgreSQL中,权限的管理分为很多多层
server、cluster、tablespace级别:这个级别一般是基于pg_hba.conf
去配置
database级别:通过命令级别操作,grant
namespace、schema级别:不用过多了解这个~~
对象级别:通过grant命令去设置
后面如果需要对database或者是对象级别做权限控制,直接基于grant命令去操作即可
sql
-- 查看grant命令
\help grant
3_创建一个自己的用户
整体流程如下:
sql
-- 准备用户
create user shenyang with password 'shenyang';
-- 准备数据库
create database shenyang;
-- 切换数据库
\c shenyang;
-- 构建schema
create schema shenyang;
-- 将schema的拥有者修改为 shenyang 用户
alter schema shenyang owner to shenyang;
-- 将shenyang库下的shenyang的schema中的表的增,改,查权限赋予给shenyang用户
grant select,insert,update on all tables in schema shenyang to shenyang;
-- 用postgres用户先构建一张表
create table shenyang.test(id int);
-- 切换到shenyang用户的shenyang库。
\c shenyang -shenyang
-- 报错:
-- 致命错误: 对用户"-shenyang"的对等认证失败
-- Previous connection kept
-- 上述方式直接凉凉,原因是匹配连接方式时,基于pg_hba.conf文件去从上往下找
-- 找到的第一个是local,匹配上的。发现连接方式是peer。
-- peer代表用当前系统用户去连接PostgreSQL
-- 当前系统用户只有postgres,没有shenyang,无法使用peer连接
-- 想构建shenyang用户时,发现postgreSQL的所有文件拥有者和所属组都是postgres,并且能操作的只有拥有者
-- 基于上述问题,不采用本地连接即可。
-- 采用远程连接。
psql -h 192.168.200.129 -p 5432 -U shenyang -W
-- 这样依赖,跳过了local链接方式的匹配,直接锁定到后面的host,host的连接方式是md5,md5其实就是密码加密了。
-- 登录后,直接输入
\dn
查看到当前database下有两个schema

这种权限的赋予方式,可以用管理员用户去构建整体表结构,如此一来,分配指定用户,赋予不同的权限,就不怕用户误操了。
4_差异补充
还有很重要的一点需要补充:
PostgreSQL填充关键字时并不像MySQL使用````````反引号标记,而是使用双引号""
。
6 安装图形化界面
1_使用 pgAdmin(官方推荐)
- 下载地址:https://www.pgadmin.org/download/
- 跨平台支持,功能全面(表管理、SQL 查询、权限配置等)
2_DBeaver(多数据库通用)
- 官网:https://dbeaver.io/
- 开源、UI 美观,支持 PostgreSQL、MySQL、Oracle 等
3_DataGrip(JetBrains 出品)
- 强大的 SQL 编辑器和数据库管理工具,适合高级用户
4_Navicat for PostgreSQL(商业)
- 功能完整,适合商业场景,但非免费
7 总结
1_安全卸载
使用如下命令完全卸载PostgreSQL,容器化安装则无需考虑数据残留问题
shell
# 卸载PostgreSQL,清空全部数据
version=15 # 定义你自己的版本号
sudo systemctl stop postgresql-${version} # 停止服务
sudo yum remove -y postgresql${version}\* # 卸载软件和软件包
# 删除所有相关目录
sudo rm -rf /var/lib/pgsql/${version}/
sudo rm -rf /usr/pgsql-${version}/
sudo rm -rf /var/log/pgsql/
# 删除用户和用户组
sudo userdel postgres
# sudo groupdel postgres
# 删除仓库配置
sudo yum remove -y pgdg-redhat-repo
# 完整清理检查
sudo find / -name "*pgsql*" -o -name "*postgres*" 2>/dev/null
2_结语
PostgreSQL 是一个值得深入掌握的数据库系统,它不仅稳定高效,而且功能强大,支持丰富的扩展能力。
无论是从性能、SQL 规范支持,还是企业级部署能力来看,它都具备成为核心数据库的实力。