PostgreSQL,也称为Postgres,是一个免费的开源关系数据库管理系统(RDBMS),强调可扩展性和技术标准合规性。 它旨在处理各种工作负载,从单机到数据仓库或具有许多并发用户的Web服务。 它是macOS Server的默认数据库,[11] [12] [13],也适用于Linux,FreeBSD,OpenBSD和Windows。
PostgreSQL具有原子性,一致性,隔离性,耐久性(ACID)属性,自动可更新视图,物化视图,触发器,外键和存储过程的事务。[14] PostgreSQL由PostgreSQL全球开发小组开发,该小组是众多公司和个人贡献者的多元化小组。[15]
名称
PostgreSQL的开发人员将PostgreSQL称为/poʊstɡrɛsˌkjuːːl/。[16]它简称为Postgres,因为关系数据库中对SQL标准的支持无处不在。最初命名为POSTGRES,名称(Post Ingres)指的是该项目起源于加州大学伯克利分校的RDBMS。[17] [18]经过审查,PostgreSQL核心团队在2007年宣布该产品将继续使用PostgreSQL这个名称。[19]
历史
PostgreSQL是从加州大学伯克利分校的Ingres项目发展而来的。 1982年,Ingres团队的负责人Michael Stonebraker离开伯克利,制作了Ingres的专有版本。[17]他于1985年回到伯克利,并开始了一个后Ingres项目,以解决当代数据库系统的问题,这些系统在20世纪80年代早期变得越来越清晰。他在2014年为这些项目和其他项目赢得了图灵奖,[20]以及其中首创的技术。
新项目POSTGRES旨在增加完全支持数据类型所需的最少功能。[21]这些功能包括定义类型和完全描述关系的能力 - 广泛使用的东西,但完全由用户维护。在POSTGRES中,数据库理解关系,并且可以使用规则以自然的方式检索相关表中的信息。 POSTGRES使用了Ingres的许多想法,但没有使用它的代码。[22]
从1986年开始,已发表的论文描述了该系统的基础,并在1988年的ACM SIGMOD会议上展示了原型版本。该团队于1989年6月向少数用户发布了第1版,随后是1990年6月重新编写规则系统的第2版。1991年发布的第3版再次重写了规则系统,并增加了对多个用户的支持。存储管理器[引证需要]和改进的查询引擎。到1993年,随着支持和功能的要求,用户数量开始超过项目。 1994年6月30日发布版本4.2 [23]后 - 主要是清理 - 项目结束。 Berkeley在MIT许可证变体下发布了POSTGRES,这使得其他开发人员可以将代码用于任何用途。当时,POSTGRES使用了受Ingres影响的POSTQUEL查询语言解释器,该解释器可以与名为monitor的控制台应用程序交互使用。
1994年,伯克利大学的研究生Andrew Yu和Jolly Chen用一种SQL查询语言替换了POSTQUEL查询语言解释器,创建了Postgres95。监视器也被psql取代。 Yu和Chen于1995年5月5日向beta测试者宣布了第一个版本(0.01).Postgres95的1.0版本于1995年9月5日宣布,更加自由的许可证使软件可以自由修改。
1996年7月8日,Hub.org Networking Services的Marc Fournier为开源开发工作提供了第一个非大学开发服务器。[1]在Bruce Momjian和Vadim B. Mikheev的参与下,工作开始稳定从伯克利继承的代码。
1996年,该项目更名为PostgreSQL以反映其对SQL的支持。 PostgreSQL.org网站的在线展示始于1996年10月22日。[24]第一个PostgreSQL版本于1997年1月29日形成6.0版。从那时起,全世界的开发人员和志愿者都将该软件作为PostgreSQL全球开发组维护。[15]
该项目继续根据其免费和开源软件PostgreSQL许可证发布。代码来自专有供应商,支持公司和开源程序员的贡献。
多版本并发控制(MVCC)
PostgreSQL通过多版本并发控制(MVCC)管理并发,它为每个事务提供数据库的“快照”,允许在不影响其他事务的情况下进行更改。这在很大程度上消除了对读锁的需要,并确保数据库保持ACID原则。 PostgreSQL提供三个级别的事务隔离:Read Committed,Repeatable Read和Serializable。因为PostgreSQL不受脏读操作的影响,所以请求Read Uncommitted事务隔离级别提供read committed。 PostgreSQL通过可序列化快照隔离(SSI)方法支持完全可序列化。[25]
存储和复制
复制
PostgreSQL包括内置的二进制复制,它基于将更改(预写日志(WAL))异步传递到副本节点,并能够对这些复制节点运行只读查询。这允许有效地在多个节点之间分割读取流量。早期允许类似读取扩展的复制软件通常依赖于向主服务器添加复制触发器,从而增加负载。
PostgreSQL包含内置的同步复制[26],可确保对于每个写入事务,主服务器等待至少一个副本节点已将数据写入其事务日志。与其他数据库系统不同,可以按数据库,每用户,每会话甚至每个事务指定事务的持久性(无论是异步还是同步)。这对于不需要此类保证的工作负载非常有用,并且可能不需要所有数据,因为由于需要确认事务到达同步备用数据库而导致性能降低。
备用服务器可以是同步或异步的。可以在配置中指定同步备用服务器,以确定哪些服务器可用于同步复制。列表中第一个主动流式传输将用作当前的同步服务器。当此操作失败时,系统将故障转移到下一行。
PostgreSQL核心中不包含同步多主复制。 Postgres-XC基于PostgreSQL,提供可扩展的同步多主复制。[27]它的许可与PostgreSQL相同。一个相关项目叫做Postgres-XL。 Postgres-R是另一个分支。[28]双向复制(BDR)是PostgreSQL的异步多主复制系统。[29]
repmgr等工具可以更轻松地管理复制集群。
有几个基于异步触发器的复制包可用。即使在引入扩展核心功能之后,对于完整数据库集群的二进制复制不合适的情况,这些仍然有用:
Slony聚-I
Londiste,SkyTools的一部分(由Skype开发)
Bucardo多主复制(由Backcountry.com开发)[30]
SymmetricDS多主,多层复制
索引
PostgreSQL包括对常规B树和散列表索引的内置支持,以及四种索引访问方法:广义搜索树(GiST),广义反向索引(GIN),空间分区GiST(SP-GiST)[31]和Block范围索引(BRIN)。此外,可以创建用户定义的索引方法,尽管这是一个非常复杂的过程。 PostgreSQL中的索引还支持以下功能:
可以使用表达式或函数的结果索引创建表达式索引,而不仅仅是列的值。
可以通过在CREATE INDEX语句的末尾添加WHERE子句来创建仅索引表的一部分的部分索引。这允许创建较小的索引。
规划器能够使用多个索引来使用临时内存位图索引操作来满足复杂查询(对于将大型事实表连接到较小维度表(例如以星型模式排列的那些),数据仓库应用程序非常有用)。
k-最近邻(k-NN)索引(也称为KNN-GiST [32])提供了对指定的“最接近的值”的有效搜索,对于查找相似的单词或用地理空间数据关闭对象或位置很有用。这是在没有穷尽的值匹配的情况下实现的。
仅索引扫描通常允许系统从索引获取数据,而无需访问主表。
PostgreSQL 9.5引入了块范围索引(BRIN)。
Schema
在PostgreSQL中,Schema包含除角色和表空间之外的所有对象。模式有效地像名称空间一样,允许同名对象在同一个数据库中共存。默认情况下,新创建的数据库具有名为public的模式,但可以添加任何其他模式,并且公共模式不是必需的。
search_path设置确定PostgreSQL检查非限定对象(没有前缀模式的对象)的模式的顺序。默认情况下,它设置为$ user,public($ user指当前连接的数据库用户)。此缺省值可以在数据库或角色级别设置,但由于它是会话参数,因此可以在客户端会话期间自由更改(甚至多次),仅影响该会话。
在对象查找期间,将以无提示方式跳过search_path中列出的不存在的模式。
在search_path中首先出现新的对象,无论哪个有效的模式(当前存在的模式)都出现.Schema是数据库的概要。
数据类型
支持各种本机数据类型,包括:
- 布尔
- 任意精度数值
- 字符(text,varchar,char)
- 二进制
- 日期/时间(时间戳/时间有/无时区,日期,间隔)
- 钱
- 枚举
- 位串
- 文字搜索类型
- 综合
- HStore,PostgreSQL中支持扩展的键值存储[33]
- 数组(可变长度,可以是任何数据类型,包括文本和复合类型),总存储大小最多为1 GB
- 几何图元
- IPv4和IPv6地址
- 无类别域间路由(CIDR)块和MAC地址
- 支持XPath查询的XML
- 通用唯一标识符(UUID)
- JavaScript Object Notation(JSON)和更快的二进制JSONB(自版本9.4起;与BSON [34]不同)
此外,用户可以创建自己的数据类型,通常可以通过PostgreSQL的索引基础结构 - GiST,GIN,SP-GiST完全索引。这些示例包括来自PostgreSQL的PostGIS项目的地理信息系统(GIS)数据类型。
还有一种称为域的数据类型,它与任何其他数据类型相同,但具有由该域的创建者定义的可选约束。这意味着使用域输入到列中的任何数据都必须符合作为域的一部分定义的任何约束。
可以使用表示一系列数据的数据类型,称为范围类型。这些可以是离散范围(例如,所有整数值1到10)或连续范围(例如,在上午10:00到11:00之间的任何时间)。可用的内置范围类型包括整数范围,大整数,十进制数,时间戳(有和没有时区)和日期。
可以创建自定义范围类型以使新类型的范围可用,例如使用inet类型作为基础的IP地址范围,或使用float数据类型作为基础的浮点范围。范围类型分别使用[/]和(/)字符支持包含和排除范围边界。 (例如,[4,9]表示从4开始包括但不包括9的所有整数。)范围类型也与用于检查重叠,包含,权限等的现有运算符兼容。
用户定义的对象
可以创建数据库中几乎所有对象的新类型,包括:
- 类型转换
- 转换
- 数据类型
- 数据域
- 功能,包括聚合函数和窗口函数
- 索引包括自定义类型的自定义索引
- 运营商(现有运营商可能超载)
- 程序语言
继承
可以将表设置为从父表继承其特征。子表中的数据似乎存在于父表中,除非使用ONLY关键字从父表中选择数据,即SELECT * FROM ONLY parent_table;。在父表中添加列将导致该列显示在子表中。
继承可用于实现表分区,使用触发器或规则将父表的插入指向正确的子表。
截至2010年,尚未完全支持此功能 - 特别是,表约束目前不可继承。父表上的所有检查约束和非空约束都由其子表自动继承。其他类型的约束(唯一,主键和外键约束)不会被继承。
继承提供了一种将实体关系图(ERD)中描述的泛化层次结构的特征直接映射到PostgreSQL数据库的方法。
其他存储功能
- 参照完整性约束,包括外键约束,列约束和行检查
- 二进制和文本大对象存储
- 表空间
- 每列整理
- 在线备份
- 使用预写日志记录实现的时间点恢复
- 使用pg_upgrade进行就地升级以减少停机时间(支持从8.3.x及更高版本升级)
控制和连接
外国数据包装器
PostgreSQL可以链接到其他系统,通过外部数据包装器(FDW)检索数据。[35]这些可以采用任何数据源的形式,例如文件系统,另一个关系数据库管理系统(RDBMS)或Web服务。这意味着常规数据库查询可以使用常规表等这些数据源,甚至可以将多个数据源连接在一起。
接口
PostgreSQL有几个可用的接口,并且在编程语言库中也得到广泛支持。内置接口包括libpq(PostgreSQL的官方C应用程序接口)和ECPG(嵌入式C系统)。外部接口包括:
- libpqxx:C ++接口
- Pgfe:C ++接口
- PostgresDAC:PostgresDAC(适用于Embarcadero RadStudio,Delphi,CBuilder XE-XE3)
- DBD :: Pg:Perl DBI驱动程序
- JDBC:Java数据库连接(JDBC)接口
- Lua:Lua接口
- Npgsql:.NET数据提供程序
- ST-Links SpatialKit:链接工具到ArcGIS
- PostgreSQL.jl:Julia界面
- node-postgres:Node.js接口
- pgoledb:OLE DB接口
- psqlODBC:打开数据库连接(ODBC)接口
- psycopg2:[36] Python接口(也被HTSQL使用)
- pgtclng:Tcl接口
- pyODBC:Python库
- php5-pgsql:基于libpq的PHP驱动程序
- 后现代:一个Common Lisp接口
- pq:Go数据库/ sql包的纯Go PostgreSQL驱动程序。驱动程序通过了兼容性测试套件。[37]
- RPostgreSQL:R接口[38]
- dpq:libpq的D接口
- epgsql:Erlang接口
- Rust-Postgres:Rust界面
程序语言
过程语言允许开发人员使用自定义子例程(函数)扩展数据库,通常称为存储过程。这些函数可用于构建数据库触发器(在修改某些数据时调用的函数)以及自定义数据类型和聚合函数。[39]在SQL级别使用DO命令,也可以在不定义函数的情况下调用过程语言。[40]
语言分为两组:用安全语言编写的程序是沙箱,可以由任何用户安全地创建和使用。以不安全语言编写的过程只能由超级用户创建,因为它们允许绕过数据库的安全限制,但也可以访问数据库外部的源。像Perl这样的语言提供了安全和不安全的版本。
PostgreSQL内置了对三种过程语言的支持:
普通的SQL(安全)。更简单的SQL函数可以内联扩展到调用(SQL)查询,这样可以节省函数调用开销,并允许查询优化器“查看”函数内部。
过程语言/ PostgreSQL(PL / pgSQL)(安全),类似于Oracle的SQL(PL / SQL)过程语言和SQL /持久存储模块(SQL / PSM)的过程语言。
C(不安全),允许将一个或多个自定义共享库加载到数据库中。用C语言编写的函数提供了最佳性能,但代码中的错误可能会崩溃并可能破坏数据库。大多数内置函数都是用C语言编写的。
此外,PostgreSQL允许通过扩展将过程语言加载到数据库中。 PostgreSQL包含三种语言扩展,以支持Perl,Python [41]和Tcl。有外部项目可以添加对许多其他语言的支持,[42]包括Java,JavaScript(PL / V8),R,Ruby等。
触发器
触发器是由SQL数据操作语言(DML)语句的操作触发的事件。例如,INSERT语句可能会激活一个触发器,该触发器检查语句的值是否有效。大多数触发器仅由INSERT或UPDATE语句激活。
触发器完全受支持,可以附加到表。触发器可以是每列和条件的,因为UPDATE触发器可以定位表的特定列,并且可以告诉触发器在触发器的WHERE子句中指定的一组条件下执行。可以使用INSTEAD OF条件将触发器附加到视图。按字母顺序触发多个触发器。除了调用本机PL / pgSQL中编写的函数之外,触发器还可以调用用其他语言编写的函数,如PL / Python或PL / Perl。
异步通知
PostgreSQL提供了一个异步消息传递系统,可通过NOTIFY,LISTEN和UNLISTEN命令进行访问。会话可以发出NOTIFY命令以及用户指定的通道和可选的有效负载,以标记发生的特定事件。其他会话能够通过发出LISTEN命令来检测这些事件,该命令可以侦听特定通道。此功能可用于多种用途,例如让其他会话知道表何时更新,或者让单独的应用程序检测何时执行特定操作。这样的系统可以防止应用程序连续轮询以查看是否有任何更改,并减少不必要的开销。通知是完全事务性的,因为在提交它们的事务之前不会发送消息。这消除了为正在执行的操作发送消息的问题,然后回滚。
PostgreSQL的许多连接器都支持这个通知系统(包括libpq,JDBC,Npgsql,psycopg和node.js),因此外部应用程序可以使用它。
规则
规则允许重写传入查询的“查询树”。 “查询重写规则”附加到表/类,并将传入的DML(选择,插入,更新和/或删除)“重写”到一个或多个查询中,这些查询替换原始DML语句或执行除此之外。查询重写发生在DML语句解析之后,但在查询规划之前。
其他查询功能
- 交易
- 全文检索
- Views
- 物化Views43]
- 可更新的Views44]
- 递归Views[45]
- 内,外(全,左,右)和交叉连接
- 子选择
- 相关的子查询[46]
- 正则表达式[47]
- 公用表表达式和可写公用表表达式
- 通过传输层安全性(TLS)加密连接;当前版本不使用易受攻击的SSL,即使使用该配置选项[48]
- 域
- 保存点
- 两阶段提交
- 超大属性存储技术(TOAST)用于通过自动压缩在单独的区域中透明地存储大型表属性(例如大型MIME附件或XML消息)。
- 嵌入式SQL使用预处理器实现。 SQL代码首先被嵌入到C代码中。然后代码通过ECPG预处理器运行,它将SQL替换为对代码库的调用。然后可以使用C编译器编译代码。嵌入也适用于C ++,但它不能识别所有C ++构造。
并发模型
PostgreSQL服务器是基于进程的(非线程化的),每个数据库会话使用一个操作系统进程。多个会话由操作系统自动分布在所有可用的CPU上。从PostgreSQL 9.6开始,许多类型的查询也可以跨多个后台工作进程并行化,利用多个CPU或核心。[49]客户端应用程序可以使用线程并从每个线程创建多个数据库连接。[50]
安全
PostgreSQL基于每个角色管理其内部安全性。角色通常被视为用户(可以登录的角色)或组(其他角色是其成员的角色)。可以在列级别的任何对象上授予或撤消权限,还可以允许/阻止在数据库,模式或表级别创建新对象。
PostgreSQL的SECURITY LABEL功能(SQL标准的扩展)允许额外的安全性;带有捆绑的可加载模块,支持基于安全增强型Linux(SELinux)安全策略的基于标签的强制访问控制(MAC)。[51] [52]
PostgreSQL本身支持大量的外部认证机制,包括:
- 密码:MD5或纯文本
- 通用安全服务应用程序接口(GSSAPI)
- 安全支持提供程序接口(SSPI)
- Kerberos的
- ident(将标识服务器提供的O / S用户名映射到数据库用户名)
- 对等(将本地用户名映射到数据库用户名)
- 轻量级目录访问协议(LDAP)
- 活动目录(AD)
- 半径
- 证书
- 可插拔认证模块(PAM)
- GSSAPI,SSPI,Kerberos,对等,身份和证书方法也可以使用指定的“映射”文件,该文件列出允许该身份验证系统匹配的用户作为特定数据库用户进行连接。
这些方法在集群的基于主机的身份验证配置文件(pg_hba.conf)中指定,该文件确定允许的连接。这允许控制哪个用户可以连接到哪个数据库,他们可以从哪里连接(IP地址,IP地址范围,域套接字),将强制执行哪个身份验证系统,以及连接是否必须使用传输层安全性(TLS)。
符合标准
PostgreSQL声称与SQL标准的一致性很高,但并不完整。一个例外是处理不带引号的标识符,如表名或列名。在PostgreSQL中,它们被折叠 - 内部 - 小写字符[53],而标准则表示不带引号的标识符应折叠成大写字母。因此,根据标准,Foo应该等同于FOO而不是foo。
基准和表现
PostgreSQL的许多非正式表演研究已经完成。[54]旨在提高可伸缩性的性能改进始于8.1版。 8.0版和8.4版之间的简单基准测试表明,后者在只读工作负载上的速度提高了10倍以上,在读写工作负载上的速度提高了至少7.5倍。[55]
第一个行业标准和同行验证的基准测试于2007年6月完成,使用Sun Java System Application Server(GlassFish的专有版本)9.0 Platform Edition,基于UltraSPARC T1的Sun Fire服务器和PostgreSQL 8.2。[56] 778.14 SPECjAppServer2004 JOPS @ Standard的结果与基于Itanium的HP-UX系统上的874 JOPS @ Standard与Oracle 10相比毫不逊色。[54]
2007年8月,Sun提交了一份改进的基准分数813.73 SPECjAppServer2004 JOPS @ Standard。随着被测系统的降价,价格/性能从84.98美元/ JOPS提高到70.57美元/ JOPS。[57]
PostgreSQL的默认配置仅使用少量专用内存用于性能关键目的,例如缓存数据库块和排序。这种限制主要是因为较旧的操作系统需要更改内核以允许分配大块共享内存。[58] PostgreSQL.org在维基中提供有关基本推荐性能实践的建议。[59]
2012年4月,EnterpriseDB的Robert Haas使用64核的服务器演示了PostgreSQL 9.2的线性CPU可扩展性。[60]
Matloob Khushi在Postgresql 9.0和MySQL 5.6.15之间进行基准测试,以处理基因组数据。在他的表现分析中,他发现PostgreSQL提取的重叠基因组区域比MySQL快8倍,使用两个80,000个数据集,每个数据集形成随机的人类DNA区域。 PostgreSQL中的插入和数据上传也更好,尽管两个数据库的一般搜索能力几乎相同。[61]
平台
PostgreSQL可用于以下操作系统:Linux(所有最新发行版),Windows(Windows 2000 SP4及更高版本;可编译,例如Visual Studio,现在最近的2017版本),FreeBSD,OpenBSD,[62] NetBSD,macOS (OS X),[13] AIX,HP-UX,Solaris和UnixWare;尚未正式测试:DragonFly BSD,BSD / OS,IRIX,OpenIndiana,[63] OpenSolaris,OpenServer和Tru64 UNIX。大多数其他类Unix系统也可以工作;最现代化的支持。
PostgreSQL适用于以下任何指令集体系结构:Windows和其他操作系统上的x86和x86-64;除了Windows之外,还支持这些:IA-64 Itanium(HP-UX的外部支持),PowerPC,PowerPC 64,S / 390,S / 390x,SPARC,SPARC 64,ARMv8-A(64位)[64]和较旧的ARM(32位,包括较旧的,如Raspberry Pi [65]中的ARMv6),MIPS,MIPSel和PA-RISC。它也被称为Alpha(在9.5中删除),M68k,M32R,NS32k和VAX。除此之外,还可以通过禁用自旋锁来为不受支持的CPU构建PostgreSQL。[66]
数据库管理
另请参见:数据库工具的比较
用于管理PostgreSQL的开源前端和工具包括:
- PSQL
-
- PostgreSQL的主要前端是psql命令行程序,可用于直接输入SQL查询或从文件执行它们。此外,psql提供了许多元命令和各种类似shell的功能,以便于编写脚本和自动执行各种任务;例如,对象名称和SQL语法的选项卡完成。
- pgAdmin的
- pgAdmin包是PostgreSQL的免费开源图形用户界面(GUI)管理工具,许多计算机平台都支持该工具。[67]该计划有十几种语言版本。第一个原型名为pgManager,是从1998年开始为PostgreSQL 6.3.2编写的,并在后几个月以GNU通用公共许可证(GPL)的形式重写并发布为pgAdmin。第二个版本(名为pgAdmin II)是完全重写的,首次发布于2002年1月16日。第三个版本pgAdmin III最初是在Artistic License下发布的,然后在与PostgreSQL相同的许可下发布。与以Visual Basic编写的先前版本不同,pgAdmin III是用C ++编写的,使用wxWidgets [68]框架允许它在大多数常见操作系统上运行。查询工具包括一个名为pgScript的脚本语言,用于支持管理和开发任务。 2014年12月,pgAdmin项目创始人兼主要开发人员Dave Page [69]宣布,随着向基于网络的模式的转变,pgAdmin 4的工作已经开始,旨在促进云部署。[70] 2016年,pgAdmin 4发布。 pgAdmin 4后端是用Python编写的,使用Flask和Qt框架。[71]
- phpPgAdmin的
- phpPgAdmin是一个基于Web的PostgreSQL管理工具,用PHP编写,基于最初为MySQL管理编写的流行的phpMyAdmin接口。[72]
- PostgreSQL Studio
- PostgreSQL Studio允许用户从基于Web的控制台执行必要的PostgreSQL数据库开发任务。 PostgreSQL Studio允许用户使用云数据库而无需打开防火墙。[73]
- TeamPostgreSQL
- 用于PostgreSQL的AJAX / JavaScript驱动的Web界面。允许通过Web浏览器浏览,维护和创建数据和数据库对象。该界面提供带选项卡的SQL编辑器,包括自动完成,行编辑小部件,行和表之间的点击式外键导航,常用脚本的收藏夹管理以及其他功能。支持Web界面和数据库连接的SSH。安装程序可用于Windows,Macintosh和Linux,以及一个从脚本运行的简单跨平台存档。[74]
- LibreOffice,OpenOffice.org
- LibreOffice和OpenOffice.org Base可以用作PostgreSQL的前端。[75] [76]
- pgBadger
- pgBadger PostgreSQL日志分析器从PostgreSQL日志文件生成详细报告。[77]
- pgDevOps
- pgDevOps是一套Web工具,用于安装和管理多个PostgreSQL版本,扩展和社区组件,开发SQL查询,监视正在运行的数据库并查找性能问题。[78]
- 许多公司为PostgreSQL提供专有工具。它们通常由适用于各种特定数据库产品的通用核心组成。这些工具主要与开源工具共享管理功能,但在数据建模,导入,导出或报告方面提供了改进。
知名的用户
使用PostgreSQL作为主数据库的着名组织和产品包括:
- 2009年,社交网站Myspace使用Aster Data Systems的nCluster数据库进行数据仓库,这是基于未经修改的PostgreSQL构建的。[79] [80]
- Geni.com使用PostgreSQL作为他们的主要家谱数据库。[81]
- OpenStreetMap,一个创建免费可编辑世界地图的合作项目。[82]
- Afili,.org,.info等域名注册机构。[83] [84]
- 索尼在线多人在线游戏。[85]
- 巴斯夫,他们的农业综合企业门户网站的购物平台。[86]
- Reddit社交新闻网站。[87]
- Skype VoIP应用程序,中央商业数据库。[88]
- Sun xVM,Sun的虚拟化和数据中心自动化套件。[89]
- MusicBrainz,开放在线音乐百科全书。[90]
- 国际空间站 - 收集轨道上的遥测数据并将其复制到地面。[91]
- MyYearbook社交网站。[92]
- Instagram,一种移动照片共享服务。[93]
- Disqus,在线讨论和评论服务。[94]
- TripAdvisor,旅游信息网站,主要是用户生成的内容。[95]
- 俄罗斯互联网公司Yandex将其Yandex.Mail服务从Oracle改为Postgres。[96]
- Amazon Redshift是AWS的一部分,是基于ParAccel Postgres修改的柱状在线分析处理(OLAP)系统。
- 国家海洋和大气管理局(NOAA)国家气象局(NWS),交互式预报准备系统(IFPS),该系统集成了NEXRAD天气雷达,地面和水文系统的数据,以建立详细的本地化预报模型。[84] [ 97]
- 英国的国家气象服务部门Met Office已经开始将Oracle for PostgreSQL转换为部署更多开源技术的战略。[97] [98]
- WhitePages.com一直在使用Oracle [99] [循环引用]和MySQL,但是当它在内部移动其核心目录时,它转向了PostgreSQL。由于WhitePages.com需要结合来自多个来源的大量数据,因此PostgreSQL以高速率加载和索引数据的能力是决定使用PostgreSQL的关键。[84]
- FlightAware,一个航班跟踪网站。[100]
- Grofers,一种在线杂货店送货服务。[101]
- 卫报在2018年从MongoDB迁移到PostgreSQL。[102]
服务实施
一些着名的供应商提供PostgreSQL作为软件即服务:
- 作为服务提供商的平台Heroku从2007年开始就支持PostgreSQL。[103]它们提供增值功能,如完全数据库回滚(从任何指定时间恢复数据库的能力),[104]基于WAL-E,由Heroku开发的开源软件。[105]
- 2012年1月,EnterpriseDB发布了PostgreSQL和他们自己专有的Postgres Plus Advanced Server的云版本,并自动配置了故障转移,复制,负载平衡和扩展。它在Amazon Web Services上运行。[106]
- 自2012年5月起,VMware为VMware vSphere上的私有云提供了vFabric Postgres(也称为vPostgres [107])。[108]
- 2013年11月,亚马逊网络服务公司宣布将PostgreSQL添加到他们的关系数据库服务产品中。[109] [110]
- 2016年11月,亚马逊网络服务公司宣布将PostgreSQL兼容性添加到其原生的Amazon Aurora托管数据库产品中。[111]
- 2017年5月,Microsoft Azure宣布为PostgreSQL提供Azure数据库[112]
原文:https://en.wikipedia.org/wiki/PostgreSQL
讨论:请加入知识星球或者小红圈【首席架构师圈】
Tags
最新内容
- 4 days 6 hours ago
- 4 days 6 hours ago
- 4 days 6 hours ago
- 4 days 6 hours ago
- 5 days 11 hours ago
- 1 week 6 days ago
- 1 week 6 days ago
- 1 week 6 days ago
- 2 weeks 2 days ago
- 2 weeks 2 days ago