PostgreSQL-01-入门篇-简介
文章目录[*]
[*]1. PostgreSQL是什么?
[*]2. PostgreSQL 历史
[*]
[*]2.1. 伯克利 POSTGRES 项目
[*]2.2. Postgres95
[*]2.3. PostgreSQL来了
[*]3. PostgreSQL vs MySQL
[*]4. 安装
[*]
[*]4.1 Windows 安装
[*]4.2 linux 安装
[*]4.3 docker安装
1. PostgreSQL是什么
PostgreSQL 是一个基于加州大学伯克利分校盘算机系开辟的 POSTGRES 版本 4.2 的对象-关系型数据库管理体系 (ORDBMS)。它与 MySQL 雷同,但 POSTGRES 许多先辈的概念在当时领先于其他贸易数据库体系。
PostgreSQL 支持大多数 SQL 尺度,并提供了许多现代特性,包罗:
[*]复杂查询
[*]外键
[*]触发器
[*]可更新视图
[*]事务完整性
[*]多版本并发控制 (MVCC)
此外,PostgreSQL 具有很高的可扩展性,允许添加:
[*]新的数据范例
[*]函数
[*]操纵符
[*]聚集函数
[*]索引方法
[*]过程语言
由于其宽松的允许证,任何人都可以免费使用、修改和分发 PostgreSQL,无论是用于私人、贸易还是学术研究目的。
排名:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMTU0NDk0YjM2MjFmNDM0Mjg2MzVmNjY0YTY1ZjA2M2IucG5n
2. PostgreSQL 历史
2.1. 伯克利 POSTGRES 项目
由 Michael Stonebraker 教授领导的 POSTGRES 项目是由防务高级研究项目局 (DARPA)、陆军研究办公室 (ARO)、国家科学基金会 (NSF) 以及 ESL, Inc. 共同赞助的。POSTGRES 的开辟始于 1986 年,其目的是探索和实现新的数据库技术,尤其是面向对象的数据模子。
POSTGRES 履历了几轮主要的版本更新。第一个演示体系在 1987 年完成,并在 1988 年的 ACM-SIGMOD 大会上展示。1989 年 6 月发布了第一个外部可用版本 1。1990 年 6 月发布的版本 2 包罗了重新设计的规则体系。版本 3 在 1991 年推出,增长了多存储管理器的支持,并改进了查询实验器和规则体系。
POSTGRES 被广泛应用于各种研究和生产环境,包罗财务数据分析体系、喷气引擎性能监控软件包、小行星跟踪数据库、医疗信息数据库以及地理信息体系。它也被许多大学用于教学。此外,lllustra Information Technologies(后来被 Informix 收购,而 Informix 现已被 IBM 所有)拿到了 POSTGRES 的代码并将其贸易化。1992 年末,POSTGRES 成为了 Sequoia 2000 科学盘算项目的主要数据管理器。
随着外部用户社区的增长,代码维护的时间成本增长,为了淘汰支持负担,伯克利的 POSTGRES 项目在版本 4.2 时正式停止。
2.2. Postgres95
1994 年,Andrew Yu 和 Jolly Chen 向 POSTGRES 中添加了 SQL 语言解释器,并将源代码以新名字 Postgres95 发布到互联网上。Postgres95 是 POSTGRES 伯克利代码的开源继承者。
Postgres95 的源代码是完全的 ANSI C,代码量淘汰了 25%,许多内部修改提高了性能和可维护性。Postgres95 的 1.0.x 版本在 Wisconsin Benchmark 测试中的性能比 POSTGRES 版本 4.2 快 30-50%。除了修复错误外,还包罗以下主要改进:
[*]原有的查询语言 PostQUEL 被 SQL 替代。
[*]增长了一个利用 GNU Readline 进行交互式 SQL 查询的工具 psql,很大程度上取代了旧的 monitor 程序。
[*]增长了新的前端库 libpgtcl,用于支持基于 Tcl 的客户端。
[*]彻底重写了大对象的接口。
[*]去掉了实例级的规则体系,但规则仍以重写规则的形式存在。
[*]在发布的源码中增长了一个简短教程,先容 SQL 和 Postgres95 的特性。
[*]使用 GNU make 编译,支持使用未经修补的 GCC 编译。
2.3. PostgreSQL来了
到了 1996 年,“Postgres95” 这个名字不再适用。因此,选择了一个新名字 PostgreSQL 来反映与最初的 POSTGRES 和最新的具有 SQL 本领的版本之间的关系。同时,版本号从 6.0 开始,将版本号放回到最初由伯克利 POSTGRES 项目开始的序列中。
许多人继承使用 “Postgres” 来指代 PostgreSQL(如今很少使用全大写字母),这种用法也被广泛接受为一种昵称或别名。
Postgres95 的开辟重点在于辨认息争决后端代码的问题,而 PostgreSQL 的开辟则转向了更具争议性的特性和功能,尽管这两个方面的工作同时进行。
3. PostgreSQL vs MySQL
PostgreSQL
MySQL
允许证
Postgres允许(雷同MIT)
GPL允许
性能
互联网规模
与Postgres相当,在极端的写入密集型工作负载下表现更好
功能
在事务处置惩罚、安全性、查询优化器、JSON、CTE和WindowFunctions方面更优秀。
不错
可扩展性
PAM+扩展功能
PAM
易用性
严谨并遵照尺度
宽容且遵照惯例
连接模子
每个进程对应一个连接
每个线程对应一个连接
生态
繁荣的社区和更多的托管提供商
大量的安装
可运维性
不错,学习曲线稍高一些
不错,易于使用和操纵
根据 2024 年 Stack Overflow 的调研结果,PostgreSQL 已经超越 MySQL 成为最受开辟者接待的数据库。随着 MySQL 逐步闭源,其客户端遵照 GPL 允许协议,这意味着开辟人员要么向 Oracle 付费,要么将自己的应用程序开源。相比之下,PostgreSQL 接纳了雷同于 MIT 的允许协议,允许开辟人员在开源或闭源产品中自由使用,这使得 PostgreSQL 成为了一种极具吸引力的选择。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZjExZjcxY2I4ZDkzNGNiODgxNzY2MjUxYzBjZjA5ZGEucG5n
PostgreSQL 的优势
[*]允许机动性:PostgreSQL 接纳了雷同于 MIT 的允许协议,这使得开辟人员可以在开源或闭源产品中自由使用,无需付出额外费用。
[*]性能优化:PostgreSQL 支持多种贸易解决方案所需的性能优化功能,包罗地理空间数据支持、无读锁并发等,这使得它被广泛应用于大型体系。
[*]复杂查询支持:对于需要实验复杂查询的体系来说,PostgreSQL 表现尤为出色。
贸易智能 (BI) 应用:在 BI 应用程序中表现出色,尤其适合需要快速读写速度的数据分析和数据仓库应用程序,因此它也非常适用于 OLTP/OLAP 体系。
[*]混淆数据范例支持:能够在单个产品中存储结构化和非结构化数据范例,支持多种数据范例,如 JSON。多年来,PostgreSQL 的一项告急创新是在 PostgreSQL 9.2 中引入了天生 JSON 数据的功能。
PostgreSQL 的功能与扩展
[*]OLTP (在线事务处置惩罚):PostgreSQL 支持事务的 ACID 属性,可以进行 CRUD (创建-读取-更新-删除) 操纵。此外,它还支持一般关系数据库常见的视图 (View)、物化视图 (Materialized View)、触发器 (Trigger) 和存储过程等功能。
[*]OLAP (在线分析处置惩罚):PostgreSQL 可以用于 OLAP 中常用的聚合处置惩罚。基于 HTAP (混淆事务/分析处置惩罚) 架构,PostgreSQL 可以在同一数据库中高效地运行 OLTP 和 OLAP 操纵。HTAP 架构打破了事务处置惩罚和分析之间的边界,使得企业能够做出更明智和更实时的贸易决议,制止了传统架构中 OLTP 和 OLAP 数据库分离所带来的复杂性和耽误。
[*]FDW (Foreign Data Wrapper):FDW 是 PostgreSQL 中的一个扩展,允许访问外部数据库中的表结构或数据。SQL 尺度在 2003 年参加了 SQL/MED (SQL Management of External Data),用于尺度化从 SQL 数据库访问远程对象的方法。PostgreSQL 9.1 支持读取远程对象,9.3 支持写入。如今,FDW 可以访问大部门关系型数据库、NoSQL 数据库和外部文本文件。
[*]流式盘算:PipelineDB 是一个用于高性能时间序列聚合的 PostgreSQL 扩展,旨在为实时报告和分析应用提供支持。
[*]地理空间:PostGIS 是 PostgreSQL 的一个空间扩展,增长了对地理对象的支持,允许在 SQL 中查询位置信息。
[*]时间序列:Timescale 扩展了 PostgreSQL 的时间序列和分析功能,例如,开辟人员可以将金融数据流、市场数据与其他业务数据结合起来,构建新的应用程序并发现独特的看法。
[*]分布式表:CitusData 是一个 PostgreSQL 的扩展,将 PostgreSQL 转变为分布式数据库,支持大规模并行处置惩罚。
这些功能和扩展使得 PostgreSQL 成为一个非常有竞争力的数据库选择,无论是在贸易应用还是开源项目中。
4. 安装
PostgreSQL 下载地点
4.1 Windows 安装
访问上面的官方下载地点,选择对应的Windows版本下载,一起next就ok了。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZTliZTA2YmE5ZWFhNGU1NmFkZDU4ZTM4ZmFiZTVhMzEucG5n
4.2 linux 安装
[*] 创建 PostgreSQL 安装目录
mkdir -p /opt/postgresql
mkdir -p /opt/postgresql/data
cd /opt/postgresql/data
[*] 下载并解压 PostgreSQL 安装包
# 然后将Postgresql-14.2-Linux.tar.gz文件拖动上传到服务器中opt/postgresql下
tar -zxvf Postgresql-14.2-Linux.tar.gz
[*] 配置、编译并安装 PostgreSQL
# 1. 进入解压后的目录
cd postgresql-12.9/
# 2. 在解压缩后的目录中执行配置命令
./configure --prefix=/opt/postgresql
# 3. 编译安装,在解压目录下执行如下命令
make && make install
留意:
[*] 如果在实验第二步出现如下错误configure: error: readline library not found 则需要实验如下下令yum -y install -y readline-devel ,然后重新实验./configure --prefix=/opt/postgresql 以及后面步骤。
[*] 同理如果出现configure: error: zlib library not found 则需要实验如下下令yum install zlib-devel ,然后重新实验./configure --prefix=/opt/postgresql 以及后面步骤。
[*] 安装工具
# 进入解压后的目录中
cd contrib
# 执行如下指令
make && make install
[*] 创建用户并授权
# 创建 PostgreSQL 用户
groupadd postgres
useradd -g postgres postgres
#先回到opt目录
cd /opt
# 修改 PostgreSQL 目录用户
chown -R postgres:postgres postgresql
[*] 修改环境变量
# 1.登录postgres账户
su postgres
# 2.执行指令修改环境变量
vim /home/postgres/.bash_profile
# 3.在文件中添加如下内容
#-------------------------------------------------
export PGHOME=/opt/postgresql
export PGDATA=/opt/postgresql/data
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.utf8
export DATE=`date +"%Y-%m-%d %H:%M:%S"`
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
alias rm='rm-i'
alias ll='ls -lh'
#--------------------------------------------------
# 4.使修改的环境变量生效
source~/.bash_profile
[*] 初始化数据库
initdb -D /opt/postgresql/data/
留意:
如果遇到initdb: error: invalid locale settings; check LANG and LC_* environment variables 这样报错,查看下下字符有没有en_us.utf8,可以用locale -a下令查看,如果没有en_US.UTF-8,则需要完成以下操纵
# 修改本地文件
vim /etc/profile
# 在这个文件里面最后一行添加
export LANG=en_us.utf8
#之后
source /etc/profile
[*] 配置数据库允许连接
# 切换到root下,修改postgresql安装目录下的配置文件
su root
# 进入postgresql的data目录
cd /opt/postgresql/data
# 编辑postgres的配置文件
vim postgresql.conf
#------------------------------
Listen_addresses = '*'
port=5432
max_connections = 100
#-------------------------------
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNjRjNzMyNDIxZDg0NDE0M2EyOWE1ZTM4MDBlM2QxNzAucG5n
[*] 配置连接方式
vim pg_hba.conf
#插入
hostallall 0.0.0.0/0 md5
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMzZlMzRhMDRlN2E5NGRjYjkyOWVkYzBjYTZjMmU4NmUucG5n
[*] 启动postgres数据库
#切换用户
su postgres
进入bin目录
cd /opt/postgresql/bin/
然后实验
./pg_ctl start
进入数据库
./psql -h localhost -p 5432 -U postgres -d admin
实验下令修改密码
ALTER USER postgres WITH PASSWORD ‘123456’;
退出
exit;
[*] 配置开机自启
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的`contrib/start-scripts`路径下,linux文件即为linux系统上的启动脚本:

# 将Linux文件复制到 /etc/init.d 目录下,并且将其重名为postgresql
cp linux /etc/init.d/postgresql
# 进入 /etc/init.d 目录下,修改postgresql文件
cd /etc/init.d/
# 编辑
vim postgresql
#---------------------
prefix=opt/postgresql
PGDATA=/opt/postgresql/data
PGUSER=postgres
PGLOG=$PGDATA/serverlog
#---------------------

添加到开机启动
# 修改文件属性:
chmod a+x postgresql
# 添加开机启动:
chkconfig --add postgresql
# 重启服务器查看服务是否自启动:
# reboot
# 查看服务
# systemctl status postgresql
4.3 docker安装
# 创建docker-compose.yaml并用文本编辑器打开它
touch docker-compose.yaml
#填充以下内容,并保存
version: 3 #编排版本
services:#服务组
db:
image: postgres #镜像源
container_name: postgres #容器名
restart: always #重启方式:always总是自动重启
environment: #环境变量设置
POSTGRES_USER: your-username #用户名
POSTGRES_PASSWORD: your-password #用户密码
POSTGRES_DB: your-database #数据库
ports: #端口设置
- "5432:5432" #宿主机端口:容器端口(映射)
#在当前docker-compose.yaml目录下,运行以下命令以启动PostgreSQL容器
docker-compose up -d
#容器启动后,可以用以下命令查看容器日志:
docker-compose logs -f
#连接数据库
psql -h localhost -U postgres -d postgres
页:
[1]