文档章节

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

RiboseYim
 RiboseYim
发布于 2018/06/23 11:06
字数 1883
阅读 343
收藏 2

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。

近30年来 PostgreSQL 无疑是您从未听说过的、最常见的开源 SQL 数据库。PostgreSQL 经常身居幕后:从 EnterpriseDB 到 Amazon Redshift 、Greenplum、Netezza 及其他许多商业数据库产品。

最近在许多商业产品的推动下,PostgreSQL 逐渐走向前台。大约十年前 EnterpriseDB 打开了潘多拉的盒子 —— 作为商业支持平台提供 Oracle 的替代品。特别是最近一段时间,云服务商提供了一系列托管产品:从 Amazon Wed Services 开始, 支持 PostgreSQL 作为其托管关系数据库服务 (Relational Database Service,RDS) 之一。

过去一年 AWS 和它的竞争对手将 PostgreSQL 的市场前景提升了一个等级。AWS 推出了兼容 PostgreSQL 的原生云数据库平台 Amazon Aurora ,作为回应 Microsoft 和 Google 推出了 Azure Database for PostgreSQL 和 Cloud SQL for PostgreSQL 解决方案。

Mark Porter(马克·波特,Amazon Aurora PostgreSQL 和 Amazon RDS for PostgreSQL 主管) 不得不通过一些花哨的方法表达 AWS 对开源社区的支持,例如修复 Bug、提供免费测试帐户和其他形式的财政支助。PostgreSQL 在 AWS 上的实现不是开源的, 因为它是为 AWS 自身的云基础结构而设计。

PostgreSQL 虽然是聚焦于事务型数据库的开源项目, 但是许多基于它的商业产品都是大规模并行处理数据仓库(Massively Parallel Processing,MPP)。出于这个原因, Greenplums,Netezzas 和Redshifts 创建了自己的开源 forks 项目, 甚至添加像 columnar tables 这样的基本功能。

PostgreSQL 的一个常见主题是支持企业级负载的开源关系数据库。关于这一点,竞争者包括 MySQL 和 MariaDB , 但仍然存在差异, PostgreSQL 支持更复杂的 SQL 函数和数据类型, 包括数组(arrays), 连接(joins)和视图(Window Functions)等等。

另一个原因是出现了“replace Oracle”的口号, PL/pgSQL 的设计非常类似 Oracle PL/SQL。这正是EnterpriseDB 多年以来一直提倡的,同时获得了 美国金融业监管局(Financial Industry Regulatory Authority,FINRA) 的支持。FINRA 将大约 650 个 Oracle 实例迁移入云( Amazon RDS for PostgreSQL),作为一个更大战略的一部分, 将其整个部署在 IT 基础设施上的业务迁移到 AWS。根据 FINRA 首席开发者 Steve Downs 的说法,对于 Oracle DBA 而言,在 PostgreSQL 中使用诸如对象/关系映射(object/relational mappings)、存储过程(stored procedures)以及利用视图(view)支持复杂查询的功能,给人一种似曾相识的感觉。

然而, 作为两种不同的数据(包括 SQL 实现)PostgreSQL 和 Oracle 之间毕竟存在显著差异。例如数据库如何处理数字和可变字符字段、同义词、复制 (replication,PostgreSQL 不像 Oracle 那样成熟 ) 以及实例化视图刷新等等。

PostgreSQL 有它独特的优势,即作为第三方寻求自主数据库产品的开源平台。重要的是, 去年秋季发布的最新 10.0 版本(2017年11月09日), 解决了在 Oracle 或 SQL Server 产品中被视为理所当然的功能,包括声明式表分区(declarative table partitioning)、改进后的复制功能(replication), 发布/订阅(publish/subscribe)、仲裁提交(quorum commits,对于云部署可能非常有用)。

总之,PostgreSQL 还有很多需要追赶的领域, Oracle 或 SQL Server 用户也仍然有理由继续使用他们的平台。大部分的差异将体现在数据库的实施, 而不是一些具体的功能特性。这种差异将主要体现在数据库弹性、自动化、基础架构选型以及云计算的规模等方面。有了 AWS、Azure 和 Google Cloud 的加持(非常值得注意的一个信号),若干年后 PostgreSQL 可能最终走出阴影。

PostgreSQL 简史

PostgreSQL 开始于 UC Berkeley 的 Ingres 计划,经历了长时间的演变。

Ingres 计划的领导者 Michael Stonebraker(迈克尔·斯通布雷克,2015 年图灵奖得主,目前是麻省理工学院兼职教授)在 1982 年离开 Berkeley 进入商业公司 Ingres,1985年又返回 Berkeley 开始新项目 Postgres 。Postgres 项目组从1986年开始发表了一些描述系统基本原理的论文并发行了版本1、2、3 、4,到1993年就有大量的用户存在了。尽管 Postgres计划正式的终止了,BSD许可证却使开发者可以获得副本并进一步开发系统。1994年,两个 UC Berkeley 的研究生 Andrew Yu 和 Jolly Chen 增加了一个SQL语言解释器来替代早先的基于 Ingres 的 QUEL 系统,创建了 Postgres95。

1996年重命名为:PostgreSQL。(版本 6.0 )

2000年,前 Red Hat 投资者筹组了一间名为Great Bridge的公司来商业化PostgreSQL,以和其他商用数据库厂商竞争。2001年末,Great Bridge 因市场原因终止营运。2001年,Command Prompt, Inc. 发布了最老牌的PostgreSQL 商业软件 Mammoth PostgreSQL,并提供开发者赞助和贡献 PL/Perl、PL/php、维护 PostgreSQL Build Farm 等。

2005年1月 ,Pervasive Software 宣布参与社区及商业支持,直到 2006 年 7 月退出。2005年1月19日,版本 8.0 发行。自 8.0 后,PostgreSQL以原生(Native)的方式,运行于Windows系统。2006年6月,Solaris 10 包含 PostgreSQL一起发布。

2012年09月10日,PostgreSQL 发布 9.2 版本,主要在性能方面的提升,也包括一些新的 SQL 特性。 2016年10月27日,PostgreSQL 发布 9.6.1 版本。 2017年11月09日,PostgreSQL 发布 10.1 版本。

ABC

# install
$ brew install postgresql
# version
$ pg_ctl -V
pg_ctl (PostgreSQL) 10.1
# initdb -- 创建一个新的PostgreSQL数据库簇(cluster),单个服务端实例管理的多个数据库的集合。
# 创建数据库数据的宿主目录,生成共享的系统表 (不属于任何特定数据库的表)和创建template1 和postgres数据库
$ initdb /Users/yanrui/Data/TestPG
# start
$ pg_ctl -D /Users/yanrui/Data/TestPG start
waiting for server to start....2018-01-03 14:13:17.005 CST [37621] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2018-01-03 14:13:17.005 CST [37621] LOG:  listening on IPv6 address "::1", port 5432
2018-01-03 14:13:17.006 CST [37621] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-01-03 14:13:17.048 CST [37623] LOG:  database system was shut down at 2018-01-03 14:11:30 CST
2018-01-03 14:13:17.066 CST [37621] LOG:  database system is ready to accept connections
 done
server started
# port listen
bash-3.2$ netstat -an | grep LISTEN     
tcp6       0      0  ::1.5432               *.*                    LISTEN
# createdb
bash-3.2$ createdb -O[owner] test_db
# default [当前登录系统用户名]
bash-3.2$ psql
2018-01-03 18:14:37.537 CST [45864] FATAL:  database "yanrui" does not exist
psql: FATAL:  database "yanrui" does not exist
You have new mail in /var/mail/yanrui
# login in
bash-3.2$ psql test_db
psql (10.1)
Type "help" for help.

# log out
test_db=# \q  (Ctrl+D)

# 卸载
$ brew uninstall postgres
# 开机
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ rm -rf ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Architecture OverView

资源

扩展阅读:DevOps 漫谈系列

更多精彩内容扫码关注公众号:RiboseYim's Blog 微信公众号

© 著作权归作者所有

RiboseYim
粉丝 79
博文 78
码字总数 179042
作品 0
广州
程序员
私信 提问
PostgreSQL 10 首个测试版发布,新增特性一览

PostgreSQL 10 的首个测试版发布了,此版本包含 PostgreSQL 10 最终将提供的所有功能的预览。当然,有些细节将在最终发布前有所更改。 PostgreSQL 10 主要特性: 新版本允许用户同时 scale ...

王练
2017/05/21
5.5K
39
开发者讨论PostgreSQL的未来

Developers Discuss PostgreSQL's Future 开发者讨论PostgreSQL的未来 posted by Thom Holwerda on Fri 6th May 2011 21:00 UTC 发表于:2011年5月7日 北京时间05:00 The release of the fi......

xyxzfj
2011/05/07
273
0
Postgres 2015 全国用户大会 (大象会 2015)

自2011年以来,PG大象会(Postgres Conference China)已经举办到第5届。大会由中国Postgres用户会(China Postgres User Group,简称:CPUG)主办,是一场汇聚各界PostgreSQL大拿、交流最新...

叶秀兰
2015/10/27
1.6K
10
Postgres 2015 全国用户大会 (大象会 2015)

自2011年以来,PG大象会(Postgres Conference China)已经举办到第5届。大会由中国Postgres用户会(China Postgres User Group,简称:CPUG)主办,是一场汇聚各界PostgreSQL大拿、交流最新...

叶秀兰
2015/10/27
17
0
PG大象又来了!PostgreSQL 2017中国技术大会

“PostgreSQL大象汇”是由PostgreSQL中国用户会发起,一年一度的PG技术盛会,到2017年已经是第7屇。正值PostgreSQL 10新版本发布之机,今年大会特意邀请到PostgreSQL开源社区创始人之一的Bru...

IT大咖说
2017/10/10
197
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
58
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
57
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
61
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
106
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部