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,无论是用于私人、商业还是学术研究目的。

排名:
在这里插入图片描述

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 成为了一种极具吸引力的选择。

在这里插入图片描述

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了。

在这里插入图片描述

4.2 linux 安装
  1. 创建 PostgreSQL 安装目录

    mkdir -p /opt/postgresql
    mkdir -p /opt/postgresql/data
    cd /opt/postgresql/data
    
  2. 下载并解压 PostgreSQL 安装包

    # 然后将Postgresql-14.2-Linux.tar.gz文件拖动上传到服务器中opt/postgresql下
    tar -zxvf Postgresql-14.2-Linux.tar.gz
    
  3. 配置、编译并安装 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 以及后面步骤。

  4. 安装工具

    # 进入解压后的目录中
    cd contrib
    # 执行如下指令
    make && make install
    
  5. 创建用户并授权

    # 创建 PostgreSQL 用户
    groupadd postgres
    useradd -g postgres postgres#先回到opt目录
    cd /opt
    # 修改 PostgreSQL 目录用户
    chown -R postgres:postgres postgresql 
    
  6. 修改环境变量

    # 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
    
  7. 初始化数据库

    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
    
  8. 配置数据库允许连接

    # 切换到root下,修改postgresql安装目录下的配置文件
    su root
    # 进入postgresql的data目录
    cd /opt/postgresql/data
    # 编辑postgres的配置文件
    vim postgresql.conf
    #------------------------------
    Listen_addresses = '*'
    port=5432
    max_connections = 100
    #-------------------------------
    

    在这里插入图片描述

  9. 配置连接方式

    vim pg_hba.conf
    #插入
    host  all  all   0.0.0.0/0    md5
    

    在这里插入图片描述

  10. 启动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;

  11. 配置开机自启

PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的`contrib/start-scripts`路径下,linux文件即为linux系统上的启动脚本:  
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/60f7280b686d4d2f9e99826a31d9970f.png)# 将Linux文件复制到 /etc/init.d 目录下,并且将其重名为postgresqlcp linux /etc/init.d/postgresql# 进入 /etc/init.d 目录下,修改postgresql文件cd /etc/init.d/# 编辑vim postgresql#---------------------prefix=opt/postgresqlPGDATA=/opt/postgresql/dataPGUSER=postgresPGLOG=$PGDATA/serverlog#---------------------![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6819d6f0ff3b4c9fb86e7e2d06ad72aa.png)  
添加到开机启动# 修改文件属性: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

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

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

相关文章

Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】

Git 理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件 标签管理理解标签创建标签操作标签删除标签 理解分布式版本控制系统 我们⽬前所说的所有内容(工作区,暂存区,版本库等等)&#x…

一文夯实垃圾收集的理论基础

如何判断一个引用是否存活 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。 优点:可即刻回收垃圾&a…

Spring Boot 配置(官网文档解读)

目录 摘要 Spring Boot 配置加载顺序 配置文件加载顺序 Spring Boot 配置加载方式 Value Value 注解简单示例 ConfigurationProperties 启动 ConfigurationProperties ConfigurationProperties 验证 ConfigurationProperties 与 Value 对比 Autowired Autowired 自…

一款功能强大的互联网资产测绘引擎-CyberEdge

声明!本文章所有的工具分享仅仅只是供大家学习交流为主,切勿用于非法用途,如有任何触犯法律的行为,均与本人及团队无关!!! 目录标题 CyberEdge简洁而强大的互联网资产测绘工具核心特性搭建指南快…

细说STM32F407单片机电源低功耗StopMode模式及应用示例

目录 一、停止模式基础知识 1、进入停止模式 2、停止模式的状态 3、退出停止模式 4、SysTick定时器的影响 二、停止模式应用示例 1、示例功能和CubeMX项目配置 (1)时钟 (2)RTC (3)ADC1 &#xf…

【三国游戏——贪心、排序】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int a[N], b[N], c[N]; int w[4][N]; int main() {int n;cin >> n;for(int i 1; i < n; i)cin >> a[i];for(int i 1; i < n; i)cin >> b[i…

[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器

目录 前言&#xff1a;Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件&#xff1a; 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件&#xff08;单击&#x…

【优选算法】----移动零

好久没写博客的兄弟姐妹们~ 今天来写一篇算法过过水吧~ --------------------------------------begin---------------------------------------- 题目要求&#xff1a; 给的难度是简单哦 题目解析&#xff1a; 这道题的思路可以借助双指针的思想&#xff0c;定义dest和c…

Java设计模式—观察者模式

观察者模式 目录 观察者模式1、什么是观察者模式&#xff1f;2、观察者模式优缺点及注意事项&#xff1f;3、观察者模式实现&#xff1f;4、手写线程安全的观察者模式&#xff1f; 1、什么是观察者模式&#xff1f; - 实例&#xff1a;现实生活中很多事物都是依赖存在的&#x…

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…

Qt 5.14.2 学习记录 —— 십칠 窗口和菜单

文章目录 1、Qt窗口2、菜单栏设置快捷键添加子菜单添加分割线和菜单图标 3、工具栏 QToolBar4、状态栏 QStatusBar5、浮动窗口 QDockWidget 1、Qt窗口 QWidget&#xff0c;即控件&#xff0c;是窗口的一部分。在界面中创建控件组成界面时&#xff0c;Qt自动生成了窗口&#xf…

SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter

前言 在微服务架构中&#xff0c;API 网关扮演着至关重要的角色&#xff0c;负责路由请求、执行安全验证、流量控制等任务。Spring Cloud Gateway 作为一个强大的网关解决方案&#xff0c;提供了灵活的方式来实现这些功能。 本篇博客将重点介绍如何在 Spring Cloud Gateway 中…

Redis源码-redisObject

解释 redis中&#xff0c;所有的数据类型最终都转换成了redisObject&#xff0c;该结构体的定义&#xff0c;在文件server.h中。 参数说明 参数名说明unsigned type:4对象对应的数据类型unsigned encoding:4对象的编码方式unsigned lru:LRU_BITSLRU算法清空对象&#xff0c…

为什么相关性不是因果关系?人工智能中的因果推理探秘

目录 一、背景 &#xff08;一&#xff09;聚焦当下人工智能 &#xff08;二&#xff09;基于关联框架的人工智能 &#xff08;三&#xff09;基于因果框架的人工智能 二、因果推理的基本理论 &#xff08;一&#xff09;因果推理基本范式&#xff1a;因果模型&#xff0…

兼职全职招聘系统架构与功能分析

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…

js重要知识点

目录 一、冒泡排序的计算方法 二、数组forEach方法 三、Number(null)和Number(undefined) 四、es6中的set 一、冒泡排序的计算方法 冒泡排序的重点:两次循环&#xff0c;外层循环是总共要进行的躺数,为数组总长度-1,内层循环则是每个元素在每一次循环中需要比较的次数&#xff…

Chrome 132 版本新特性

Chrome 132 版本新特性 一、Chrome 132 版本浏览器更新 1. 在 iOS 上使用 Google Lens 搜索 在 Chrome 132 版本中&#xff0c;开始在所有平台上推出这一功能。 1.1. 更新版本&#xff1a; Chrome 126 在 ChromeOS、Linux、Mac、Windows 上&#xff1a;在 1% 的稳定版用户…

2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面&#xff0c;市场规模与用户规模双增长&#xff0c;创造大量高收入就业岗位并带动产业链升级。内容创作上&#xff0c;精品化、品牌化趋势凸显&#xff0c;题材走…

基于GRU实现股价多变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…

Python基于Django的社区爱心养老管理系统设计与实现【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…