PostgreSQL系列文章
文章目录
前言
本文主要简单聊一聊PostgreSQL
提示:以下是本篇文章正文内容,下面案例可供参考
一 PostgreSQL是什么?
上图是官网的一个介绍,翻译过来就是这个世界上最先进的开源关系数据库。
PostgreSQL(发音为 Post-Gres-QL)是一个功能强大的开源对象关系数据库系统,最初设想于1986年,当时被叫做Berkley Postgres Project。该项目一直到1994年都处于演进和修改中,直到开发人员Andrew Yu和Jolly Chen在Postgres中添加了一个SQL(Structured Query Language,结构化查询语言)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。
1996年,再次对Postgres95做了较大的改动,并将其作为PostgresSQL6.0版发布。该版本的Postgres提高了后端的速度,包括增强型SQL92标准以及重要的后端特性(包括子选择、默认值、约束和触发器)。
经过 30 多年的积极开发,在可靠性、功能稳健性和性能方面赢得了良好的声誉。它在国外流行程度比国内高,不过最近几年国内有这种流行趋势了。并且由于它是自由许可证,任何人都可以出于任何目的免费使用、修改和分发PostgreSQL ,无论是私人的、商业的还是学术的。
二 PostgreSQL的简单使用
2.1 PostgreSQL的安装
直接搜索引擎输入PostgreSQL进入它的官网点击下载就可以看到不同操作系统对应的安装包
本文就不对这个安装过程做太多的介绍了,因为相关资料太多了,下面是一个笔者觉得不错的保姆级安装教程,推荐给大家:
https://developer.aliyun.com/article/745938 作者Yunxi.D
通过这个详细的教程,大家很容易就能安装成功。
三 PostgreSQL 和其他数据库相比如何?
笔者主要通过功能特性、性能、可靠性、是否有技术支持和是否开源免费这几个方面来介绍
3.1 功能特性
PostgreSQL拥有大型数据库中的大多数特性,比如事务、子查询、触发器、视图、外键引用、表的可伸缩性和锁。也有某些大型数据库没有的特性,如用户定义类型、继承、规则和多版本并发控制,以减少锁争用。
3.2 性能
PostgreSQL 的性能可与开源数据库相媲美,各有优劣。
3.3 可靠性
经过 30 多年的积极开发,每个版本都有至少一个月的 beta 测试,官网也有发布历史,通过查阅是可以提供稳定、可靠的版本的,可供生产使用,相比一些数据库这方面笔者觉得是有优势的。
3.4 是否有技术支持
官网底下是有一个提交Bug的入口的,邮件列表也提供与大量开发人员和用户的联系,以帮助解决遇到的任何问题。而且官方的文档相对来说很完善,PostgreSQL也有相应的中文社区(地址:http://www.postgres.cn/index.php/v2/home)
3.5 是否开源免费
真正意义上的免费开源,PostgreSQL的开源协议是类似于BSD协议或MIT的协议,可以在任何目的下进行分发、闭源或者开源。
许可证地址:https://tldrlegal.com/license/postgresql-license-(postgresql)
这里不得不说到MySQL,它是已经被Oracle所控制,MySQL同时使用了GPL(GNU General Public License)和一种商业许可(称为双重许可)。
注:
GNU 通用公共许可协议(英语:GNU General Public License,简称GNU GPL或GPL),是一个广泛被使用的自由软件许可协议,最初由理查德·斯托曼为GNU计划而撰写。此许可协议最新版本为“第3版”(v3),2007年6月29日发布。GNU宽通用公共许可协议(英语:GNU Lesser General Public License,一般简称LGPL)是改自GPL的另一个版本,其目的是为了应用于一些软件库。GPL给予了电脑程序自由软件的定义,并且使用“Copyleft”来确保程序的自由被完善的保留,这个协议一直有在演变中,内容表述比较复杂,这很大程度上的使MySQL的开源变得不那么纯粹了。
以下是MySQL中的具体约束:
① 不允许对在MySQL上作出的修改申请专利;
② MySQL上的修改需要公开,且所有权归Oracle所有;
③ 出于纯学术目的、练习目的源码修改也是符合GPL的;
④ Oracle的MySQL企业版或高级功能会涉及费用,并且Oracle公司不允许其它基于MySQL的闭源产品。
四 PostgreSQL与MySQL的比较
特性 | Postgresql | MySQL |
---|---|---|
描述 | The world’s most advanced open source database | The world’s most popular open source database |
发展 | 是一个纯粹的开源项目 | 笔者觉得不是一个纯粹的开源项目 |
实现语言 | C | C、C++ |
图形化工具 | PgAdmin | MySQL Workbench |
ACID | Yes | Yes |
存储引擎 | 单一存储 | 多存储引擎,其中InnoDB 和 MyISAM使用的最多 |
全文检索 | Yes | Yes |
删除临时表 | 随着数据库的连接的断开而被删除 | 需要手动删除 |
删除表 | 级联操作:也就是更新、删除父表,将会同步更新、删除子表;而反过来则不变 | 不支持级联操作 |
清空表 | 对于移除表中的数据,delete是可以的,但是对于一个大表,truncate是更加有效的方式,因为truncate删除表中所有行的时候不需要扫表整个表 | 永久性删除,不可以撤销 |
自增列 | 串行 | 自动递增 |
解析功能 | Yes | No |
数据类型 | 支持array、hstore、user-defined type等多种高级类型。 | sql标准类型 |
无符号整数 | No | Yes |
布尔类型 | Yes | 内部使用TINYINT(1)表示布尔值 |
IP地址数据类型 | Yes | No |
设置列默认值 | 同时支持常量和函数调用 | 必须是一个常量或CURRENT_TIMESTAMP的TIMESTAMP或DATETIME列 |
公共表表达式 | Yes | No |
EXPLAIN细节输出 | 更详细 | 相对没有那么详细 |
物化视图 | Yes(Postgresql将视图概念扩展到下一个级别,允许视图在物理上存储数据,我们将这些视图称为物化视图,物化视图会缓存复杂的查询结果,然后允许定期刷新此结果) | No |
检查约束 | Yes | No (MySQL忽略CHECK约束) |
表继承 | Yes | No |
存储过程的编程语言 | Ruby, Perl, Python, TCL, PL/pgSQL, SQL, JavaScript, etc. | SQL:2003 syntax for stored procedures |
全外连接 | Yes | No |
INTERSECT运算符 | Yes(Postgresql的INTERSECT运算符将两个或多个SELECT语句的结果集合并到一个结果集中) | No |
Except运算符 | Yes(Except运算符通过比较两个或多个quires的结果集来返回行,此返回行存在于第一查询子句而不存在第二查询子句中) | No |
部分索引 | Yes | No |
位图索引 | Yes | No |
表达式索引 | Yes | NO |
覆盖索引 | Yes (since version 9.2) | Yes(MySQL支持覆盖索引,允许仅通过扫描索引来检索数据,而不涉及表数据。对于具有数百万行的大型表,非常有利。) |
触发器 | 支持可以在大多数命令类型上触发的触发器,除了那些会影响数据库全局的触发器,例如角色和表空间 | 仅限于一些命令 |
分区 | RANGE, LIST | RANGE、LIST、HASH、KEY,以及使用RANGE或LIST与HASH或KEY子分区组合的复合分区 |
任务定时 | pgAgent | Scheduled event |
连接规模 | 每个新连接都是一个操作系统进程 | 每个新连接都是一个操作系统线程 |
SQL兼容性 | 兼容大部分SQL | MySQL是部分兼容SQL的。例如,不支持检查约束 |
适用性 | 执行复杂查询时,可以用PostgreSQL,性能很突出 | 当只需要读取速度时,MySQL在OLAP和OLTP系统中表现良好。 |
支持JSON | 支持JSON和其他NoSQL特性,比如原生XML支持。它还允许为JSON数据建立索引,以便更快地访问。 | MySQL支持JSON数据类型,但不支持任何其他NoSQL特性。 |
默认值 | 默认值只能在系统级进行修改 | 默认值可以在会话级和语句级被覆盖 |
B-tree索引 | 运行时合并动态转换 | 恰当时机可以用两个甚至更多的B树索引 |
对象数据 | 非常好的对象统计 | 相当好的对象统计 |
注
如有不足后续补充,欢迎各位大佬指出不足之处
总结
以上就是笔者对PostgreSQL的一些简单介绍。
著作权归NoLongerConfused所有。商业转载请联系NoLongerConfused获得授权,非商业转载请注明出处。