PostgreSQL关系型数据库介绍与部署

使用背景

在过去的几年中,PostgreSQL的使用量逐渐增加,而Oracle和MySQL的使用量则有所下降。这主要是由于以下几个原因:开源和免费、功能丰富、可扩展性强、安全性高、跨平台支持好、社区活跃、成熟稳定。这些因素使得PostgreSQL成为了许多开发者和组织的首选数据库解决方案,从而推动了它的流行。下面介绍一下这款关系型数据库PostgreSQL。

目录

一、PostgreSQL 介绍

1. 概念

2. 特点

3. 作用

4. 使用场景

5. PostgreSQL 与 MySQL 对比

5.1 PG 相对于 MySQL 的优势

5.2 MySQL 相对于 PG 的优势

二、PostgreSQL 部署

1. Yum 安装 PG

1.1 选择操作系统及版本

1.2 选择需要安装的软件版本及环境

1.3 安装并运行 

1.4 登录数据库

2. 编译安装

2.1 安装依赖包

2.2 源码编译安装

2.3 创建数据库用户和组

2.4 创建数据目录并授权

2.5 设置环境变量

2.6 初始化数据库

2.7 启动和关闭服务

2.8 创建 service 文件

2.9 登录数据库

三、PostgreSQL 远程登录

1. 编辑配置文件

2. 重启数据库服务

3. 远程登录


一、PostgreSQL 介绍

1. 概念

PostgreSQL 是当前功能最强大的开源的关系型数据库系统,支持跨平台的多种操作系统, 基于C语言开发。通常简称为PG或PGSQL。 PostgreSQL是100%社区驱动的开源项自,由全球范围内千人以上的社区责献者共同维护。PostgreSQL提供了一个完整功能的瓶本,而不像MySQL那样提供多个不同的版本,如社区版、商业版及企业版。

官网:PostgreSQL: The world's most advanced open source database

中文社区: PostgreSQL中文社区:: 世界上功能最强大的开源数据库...

中文手册: PostgreSQL 14.1 手册

2. 特点

① 开源和免费:是一款完全开源的数据库系统,用户可以免费使用、修改和分发它。

② 功能丰富:具有许多高级功能,包括复杂查询、事务支持、触发器、存储过程、视图、全文搜索、地理空间数据处理等。

③ 可扩展性:具有良好的可扩展性,支持水平扩展和垂直扩展。通过使用分区表、复制、流复制等功能,可以轻松地扩展数据库以满足不断增长的需求。

④ 安全性:注重数据安全性,提供了各种安全功能,如访问控制、SSL支持、加密存储、审计功能等,可以帮助保护数据免受恶意攻击和数据泄露。

⑤ 跨平台支持:可以在各种操作系统上运行,包括Linux、Unix、Windows和macOS等,这使得它具有很好的跨平台兼容性。

⑥ 社区支持:拥有一个庞大的全球开发者社区,提供了丰富的文档、教程和支持资源。用户可以通过邮件列表、论坛等渠道获得帮助和交流经验。

⑦ 成熟稳定:已经存在了30多年,经过了多次的版本迭代和改进,已经非常成熟和稳定。许多大型企业和组织都在使用PostgreSQL来处理他们的关键业务数据。

3. 作用

PostgreSQL是一款功能丰富、可靠稳定、安全性高的开源数据库管理系统,适用于各种规模的应用程序和企业,可以满足各种复杂的数据需求。

① 数据存储和管理:PostgreSQL可以存储和管理大量的数据,包括结构化数据、半结构化数据和非结构化数据。

② 数据查询和分析:PostgreSQL提供了强大的查询和分析功能,包括复杂查询、聚合函数、窗口函数、分析函数等。

③ 数据安全:PostgreSQL提供了各种安全功能,如访问控制、SSL支持、加密存储、审计功能等,可以帮助保护数据免受恶意攻击和数据泄露。

④ 数据一致性和完整性:PostgreSQL支持事务,可以确保数据的一致性和完整性。

⑤ 数据复制和高可用性:PostgreSQL支持数据复制和流复制,可以提供数据的备份和高可用性。

⑥ 数据分区和分布式处理:PostgreSQL支持分区表,可以将数据分布到多个物理存储设备上,从而提高查询性能。

⑦ 地理信息系统(GIS):PostgreSQL具有强大的地理信息系统支持,包括地理空间数据类型、索引和查询功能。

⑧ 全文搜索:PostgreSQL提供了全文搜索功能,包括全文索引和全文搜索查询。

4. 使用场景

① Web应用程序:PostgreSQL是许多Web应用程序的首选数据库解决方案,包括许多大型的社交网络、电子商务网站、新闻门户等。它的高级功能和可扩展性使得它能够处理大量的数据和复杂的查询需求。

② 地理信息系统(GIS):PostgreSQL具有强大的地理信息系统支持,包括地理空间数据类型、索引和查询功能。因此,它被许多GIS应用程序用作后端数据库。

③ 全文搜索:PostgreSQL提供了全文搜索功能,包括全文索引和全文搜索查询。这使得它成为许多需要全文搜索功能的应用程序的首选数据库解决方案。

④ 大数据处理:PostgreSQL的可扩展性和高级功能使得它能够处理大量的数据,包括大数据处理、数据仓库等。

⑤ 金融和电信行业:PostgreSQL被许多金融和电信公司用于处理他们的关键业务数据,包括交易数据、客户数据等。它的高级功能和数据安全性使得它成为这些行业的首选数据库解决方案。

⑥ 科学研究:PostgreSQL被许多科学研究机构用于处理和分析科学数据,包括天文学、生物学、气象学等。它的高级功能和可扩展性使得它能够满足这些领域的复杂数据需求。

5. PostgreSQL 与 MySQL 对比

5.1 PG 相对于 MySQL 的优势

  • 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨。
  • 对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强。
  • PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
  • PG的主备复制属于物理复制,相对于MySQL基于biniog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
  • PostgreSQL支持ISON和其他NOSQL功能,如本机XML支持和使用HSTORE的键值对。它还支持索引SON数据以加快访问速度,特别是10版本JSONB更是强大。
  • PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgresQl数据库不会被其它公司控制。相反,MySQL现在主要是被Oracle公司控制。

5.2 MySQL 相对于 PG 的优势

  • innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触 发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。
  • MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、制改操作,但是对表结构设计存在约束。
  • MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作。
  • MySQL相对于PG在国内的流行度更高,PG在国内显得就有些落了。
  • MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,mvisam适合静态数据的查询场暴。

总结

从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),但不仅仅限制于此,PostareSQl的ison,isonb,hstore等数据格式,特别适用于一些大数据格式的分析;而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、acebook、albaba),当然现在MySQL的在innodb引擎的大力发展,功能表现良好。

二、PostgreSQL 部署

1. Yum 安装 PG

使用官方源: PostgreSQL: Downloads

1.1 选择操作系统及版本

1.2 选择需要安装的软件版本及环境

1.3 安装并运行 

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 使用yum包管理器安装PostgreSQL的官方YUM存储库。这个存储库包含了PostgreSQL的二进制安装包,可以让你使用yum来安装和更新PostgreSQL。
sudo yum install -y postgresql14-server
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
# 使用PostgreSQL 14的postgresql-14-setup脚本初始化一个新的PostgreSQL 14数据库。
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14

1.4 登录数据库

方法一:在默认配置下,本机访问 PostgreSQL

[root@localhost ~]# su - postgres               # 切换 postgres 用户
上一次登录:日 3月 24 12:49:21 CST 2024pts/0 上
-bash-4.2$ psql                                 # 登录 PostgreSQL 控制台
psql (14.11)
输入 "help" 来获取帮助信息.postgres=#                       # 此时说明用 postgres 身份登录数据库,且不需要密码
postgres=# \password postgres                   # 给 postgres 用户设置密码
Enter new password for user "postgres": 
再输入一遍:

方法二:创建新用户来访问 PostgreSQL

[root@localhost ~]# su - postgres              # 切换linux用户postgres
上一次登录:日 3月 24 13:03:32 CST 2024pts/0 上
-bash-4.2$ psql                                # 执行psql
psql (14.11)
输入 "help" 来获取帮助信息.postgres=# CREATE USER dbfql WITH PASSWORD '123456'; # 创建数据库用户dbfql
CREATE ROLE
postgres=# CREATE DATABASE db1 OWNER dbfql;    # 创建数据库db1
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO dbfql;  # 将db1数据库的所有权都赋予dbdql
GRANT  
postgres=# \q-bash-4.2$ exit
登出[root@localhost ~]# useradd dbfql  # 创建普通用户dbfql
[root@localhost ~]# passwd dbfql
[root@localhost ~]# su - dbfql
上一次登录:日 3月 24 13:42:25 CST 2024pts/0 上
[dbfql@localhost ~]$ psql -d db1
psql (14.11)
输入 "help" 来获取帮助信息.db1=> 

方法三:已存在普通用户,在数据库创建同名用户和数据库

[root@localhost ~]# id lisi
uid=1002(lisi) gid=1002(lisi) 组=1002(lisi)
[root@localhost ~]# su - postgres
上一次登录:日 3月 24 13:29:32 CST 2024pts/0 上
-bash-4.2$ psql
psql (14.11)
输入 "help" 来获取帮助信息
postgres=# CREATE USER lisi WITH PASSWORD '123456';
CREATE ROLE
postgres=# CREATE DATABASE lisidb OWNER lisi;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE lisidb TO lisi;
GRANT
postgres=# \q
-bash-4.2$ exit
登出[root@localhost ~]# su - lisi
上一次登录:日 3月 24 13:51:56 CST 2024pts/0 上
[lisi@localhost ~]$ psql -d lisidb
psql (14.11)
输入 "help" 来获取帮助信息.lisidb=> 

2. 编译安装

2.1 安装依赖包

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y gcc.x86_64 make readline-devel zlib-devel

2.2 源码编译安装

[root@localhost opt]# wget https://ftp.postgresql.org/pub/source/v14.1/postgresql-14.1.tar.gz
[root@localhost opt]# ls
postgresql-16.2.tar.gz  rh
[root@localhost opt]# tar xf postgresql-14.1.tar.gz 
[root@localhost opt]# cd postgresql-14.1/
[root@localhost postgresql-14.1]# ./configure --prefix=/apps/pgsql --with-pgport=5432
[root@localhost postgresql-14.1]# make -j 2 && make install

2.3 创建数据库用户和组

PostgreSQL 默认不支持 以 root 身份启动服务,虽然也可修改源码实现 root 启动,但基于安全考虑不建议,因此必须创建一个用于启动 PostgrepSQL 的普通用户。

[root@localhost postgresql-14.1]# useradd -s /bin/bash -m -d /home/postgres postgres
# 创建数据库用户和组,注意此用户需要可以交互登录
[root@localhost postgresql-14.1]# echo "123123" | passwd  --stdin  postgres
更改用户 postgres 的密码 。
passwd:所有的身份验证令牌已经成功更新。
# 修改postgres密码

2.4 创建数据目录并授权

[root@localhost postgresql-14.1]# mkdir /pgsql/data -pv
[root@localhost postgresql-14.1]# chown postgres.postgres /pgsql -R

2.5 设置环境变量

[root@localhost ~]# vim /etc/profile.d/pgsql.sh
export PGHOME=/apps/pgsql
export PATH=$PGHOME/bin/:$PATH
export PGDATA=/pgsql/data
export PGUSER=postgres
export MANPATH=/apps/pgsql/share/man:$MANPATH

2.6 初始化数据库

[root@localhost ~]# su - postgres
[postgres@localhost ~]$ initdb -D /pgsql/data  # -D 指定数据目录

2.7 启动和关闭服务

[postgres@localhost ~]$ pg_ctl start
#开启
[postgres@localhost ~]$ pg_ctl stop
#停止
[postgres@localhost ~]$ pg_ctl -l logfile start
#将日志记录到文件中,不加就打印在屏幕上
[postgres@localhost ~]$ pg_ctl restart
#重启

2.8 创建 service 文件

[root@localhost ~]# vim /lib/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
User=postgres
Group=postgres
ExecStart=/apps/pgsql/bin/postmaster -D /pgsql/data
ExecReload=/bin/kill -HUP
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl start postgresql.service 
[root@localhost ~]# systemctl status postgresql
● postgresql.service - PostgreSQL database serverLoaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)Active: active (running) since 日 2024-03-24 15:17:25 CST; 2s ago

2.9 登录数据库

[root@localhost ~]# su - postgres
上一次登录:日 3月 24 15:01:04 CST 2024pts/0 上
[postgres@localhost ~]$ psql
psql (14.1)
Type "help" for help.postgres=# 

三、PostgreSQL 远程登录

1. 编辑配置文件

[root@localhost ~]# vim /pgsql/data/postgresql.conf
listen_address = '*'
# 在所有IP地址上监听,从而允许远程连接到数据库服务器[root@localhost ~]# vim  /pgsql/data/pg_hba.conf
host    all             all             0.0.0.0/0               md5
# 允许任意用户从任意地址上以密码方式访问数据库[root@localhost ~]# su - postgres
上一次登录:日 3月 24 15:17:53 CST 2024pts/1 上
[postgres@localhost ~]$ psql
psql (14.1)
Type "help" for help.postgres=# alter user postgres with password '123123';  # 登录数据修改密码
ALTER ROLE

2. 重启数据库服务

[root@localhost ~]# systemctl restart postgresql.service

3. 远程登录

[root@localhost ~]# psql -U postgres -h 192.168.190.104
用户 postgres 的口令:
psql (14.11, 服务器 14.1)
输入 "help" 来获取帮助信息.postgres=# 

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

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

相关文章

redis和redisson实现分布式锁

redis和redisson实现分布式锁 基于setnx命令的分布式锁基于set命令的分布式锁redission看门狗分布式锁 基于setnx命令的分布式锁 1. 加锁 使用 Redis 实现分布式锁,最直接的想法是利用 setnx 和 expire 命令实现加锁。 在 Redis 中,setnx 是「set if …

【Java - 框架 - Lombok】(1) 普通Java项目通过Lombok+Logback完成日志的创建使用 - 快速上手

普通Java项目通过"Lombok""Logback"完成日志的创建使用 - 快速上手&#xff1b; 步骤A 说明 创建"Maven"项目&#xff1b; 图片 步骤B 说明 添加相关依赖项&#xff1b; 图片 代码 <!-- "Lombok"依赖项--> <dependency>&…

处理登录失效后提示多个错误

问题: 我的场景是后端规定&#xff0c;即使登录失效返回的code仍是200&#xff0c;然后data的code是999什么的&#xff1b; 原本代码&#xff1a; 修改版代码&#xff1a; 通过节 const NotLoginEvent () > {router.replace("/login");localStorage.clear();M…

WorkPlus AI助理实现私有化AI智能客服,助力企业满足客户需求

私有化AI智能客服的出现&#xff0c;以其卓越的性能和全面的功能&#xff0c;助力企业提升客户服务体验。WorkPlus AI助理作为一款领先的解决方案&#xff0c;可实现企业的私有化AI智能客服&#xff0c;提升客户服务的质量和效率。 私有化AI智能客服的价值和意义不言而喻。通过…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络&#xff1a;传输控制协议&#xff08;Transmission Control Protocol-TCP协议&#xff09; 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手&#xff0c;243)1.1 为什么要三次握手&#xff0c;两次不行吗&#xff1f; 2. 释放连接的过程(…

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解

往期回顾&#xff1a; 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号-CSDN博客 【QT入门】 Qt内存管理机制详解-CSDN博客 【QT入门】 Qt代码创建布局之水平布局、竖直布局详解 先看两个问题&#xff1a; 1、ui设计器设计界面很方便&#xf…

学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)、logisim工具

https://www.nandgame.com/ 免费 https://store.steampowered.com/app/1444480/Turing_Complete/ 收费&#xff0c;70元。据说可以导出 Verilog &#xff01; logisim及其衍生版本 都需要安装java环境。 http://www.cburch.com/logisim/ 是原版&#xff0c; 下载页面&#…

ES的集群节点发现故障排除指南(2)

本文是ES官方文档关于集群节点发现与互联互通的问题排查指南内容&#xff0c;第二部分。 原文参考及相关内容&#xff1a; 英文原文&#xff08;官网&#xff09; 第一部分-&#xff08;1&#xff09; 已选出主节点但状态不稳定&#xff1f; 当一个节点赢得主节点选举时&…

ReentrantLock 原理

(一)、非公平锁实现原理 1、加锁解锁流程 先从构造器开始看&#xff0c;默认为非公平锁实现 public ReentrantLock() {sync new NonfairSync(); } NonfairSync 继承自 AQS 没有竞争时 加锁流程 构造器构造&#xff0c;默认构造非公平锁(无竞争&#xff0c;第一个线程尝试…

二叉树|701.二叉搜索树中的插入操作

力扣题目链接 class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root NULL) {TreeNode* node new TreeNode(val);return node;}if (root->val > val) root->left insertIntoBST(root->left, val);if (root->val < val) r…

【JavaEE】初识线程,线程与进程的区别

文章目录 ✍线程是什么&#xff1f;✍线程和进程的区别✍线程的创建1.继承 Thread 类2.实现Runnable接口3.匿名内部类4.匿名内部类创建 Runnable ⼦类对象5.lambda 表达式创建 Runnable ⼦类对象 ✍线程是什么&#xff1f; ⼀个线程就是⼀个 “执行流”. 每个线程之间都可以按…

RobotFramework编写用例,在Jenkins上如何实现用例的并发运行?

我们了解RobotFramework编写自动化测试用例的方法&#xff0c;了解如何将用例在Jenkins上运行。 但是&#xff0c;随着用例的增多&#xff0c;传统的pybot/robot命令运行测试用例会耗费大量的时间&#xff0c;这就慢慢成为了一个苦恼的问题。 那么&#xff0c;在Jenkins上如何…

Linux_进程概念_冯诺依曼_进程概念_查看进程_获取进程pid_创建进程_进程状态_进程优先级_环境变量_获取环境变量三种方式_3

文章目录 一、硬件-冯诺依曼体系结构二、软件-操作系统-进程概念0.操作系统做什么的1.什么叫做进程2.查看进程3.系统接口 获取进程pid- getpid4.系统接口 获取父进程pid - getppid5.系统接口 创建子进程 - fork1、手册2、返回值3、fork做了什么4、基本用法 6.进程的状态1、进程…

探索Python人工智能在气象监测中的创新应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

修改nuxtjs项目中的浏览器图标步骤

处理步骤&#xff1a; 打开配置页面 使用el-upload 上传图片到后台 后台把图片转为ico&#xff0c;返回图标路径 配置页面修改本页面预览图&#xff0c;点击保存&#xff0c;修改的数据库。 通知nuxt布局页面&#xff0c;修改head节点中的图标属性&#xff0c;…

Vscode与Cmake搭配配置opencv使用

vscode与Cmake基本使用 下载插件 CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q&#xff0c;VSCode会根据输入自动提示&#xff0c;然后选择CMake: Quick Start选择编译器根据提示输入项目名称选择可执行文件编译项目 方式一&#xff1a;执行命令cd build cmake…

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中&#xff0c;数据是通过很多计算机或者通信设备相互转发&#xff0c;才能够到达目的地,所以在这个转发的过程中&#xff0c;如果通信包…

数据库-索引快速学

索引 当表中数据量庞大时&#xff0c;往往搜索一条数据就会耗费很长的时间等待 索引是帮助数据库高效获取数据的数据结构 create index 索引名 on 数据表名&#xff08;字段名&#xff09;;为该表下的某一字段创建索引&#xff0c;检索耗时会大大的减小 索引的优缺点 优点&…

盏燕生物科技将出席2024第七届燕窝天然滋补品博览会

参展企业介绍 深圳市盏燕生物科技有限公司&#xff0c;办公室地址位于中国第一个经济特区&#xff0c;鹏城深圳&#xff0c;深圳市龙岗区平湖街道禾花社区富安大道18号亚钢工贸大楼1栋1017A&#xff0c;我公司主要提供一般经营项目是&#xff1a;初级农产品、海产品、化妆品、…

使用Python抓取抖音直播间数据的简易指南【第152篇—抓取数据】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python抓取抖音直播间数据的简易指南 说明&#xff1a;本文已脱敏&#xff0c;隐去地址…