了解PostgreSQL

PostgreSQL中文社区官网:http://www.postgres.cn/home

PostgreSQL全球社区官网:http://www.postgresql.org/


本文转自:http://www.postgres.cn/about

英文参考: http://www.postgresql.org/about/


一、概要介绍

PostgreSQL是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事务安全性数据库,完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。它支持了大多数的SQL:2008标准的数据类型,包括整型、数值值、布尔型、字节型、字符型、日期型、时间间隔型和时间型,它也支持存储二进制的大对像,包括图片、声音和视频。PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档。

作为一种企业级数据库,PostgreSQL以它所具有的各种高级功能而自豪,像多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。它支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。它也在所能管理的大数据量和所允许的大用户量并发访问时间具有完全的高伸缩性。目前已有很多PostgreSQL的系统在实际生产环境下管理着超过4TB的数据。一些PostgreSQL系统的极限值如下表所列:

   极限值:

    最大单个数据库大小    不限

    最大数据单表大小    32 TB

    单条记录最大    1.6 TB

    单字段最大允许    1 GB

    单表允许最大记录数    不限

    单表最大字段数    250 - 1600 (取决于字段类型)

    单表最大索引数    不限

    由于PostgreSQL的优异性能,它已赢得最终用户和业内的多次大奖,包括Linux新媒体(Linux New Media)的最佳数据库奖和5次Linux期刊编辑选出的最佳数据库奖。

    众多功能和标准兼容性

    PostgreSQL对SQL标准高度兼容,它实现的功能完全遵守于ANSI-SQL:2008标准。目前完全支持子查询(包括在FROM中的子查询)、授权读取和可序列化的事务隔离级别。同时PostgreSQL也具有完整的关系数据库系统的目录功能,它支持单数据库的多模式功能,每一个目录可通过SQL标准中定义的字典信息模式进行访问。

Data集成性功能包括(复合)主键、含有严格约束或级联更新和删除功能的外键、录入检查约束、唯一性约束和非空约束。

PostgreSQL也具有很多扩展模块和更高级的功能。其中有为方便使用的通过序列实现的自增字段、 允许返回部分记录集的LIMIT/OFFSET选项,也支持复合、唯一、部分和函数式索引,索引并支持B-Tree、R-Tree、Hash或GiST存储方式。

GiST (通用搜索树) 索引是一种高级系统算法,它将不同的排序算法与包含B-Tree、B+-Tree、R-Tree、部分汇总树、可加权的B+-Tree以及其他多种搜索逻辑结合在一起,它也提供了接口允许创建用户数据类型和扩展的查询方法。这样,GiST提供了用户指定存储和定义新方法进行查询的灵活性---它大大超越了标准B-Tree、R-Tree和其他通用搜索逻辑所能提供的功能。

GiST现在也成为很多其他使用PostgreSQL公共项目的基础,如OpenFTS和PostGIS项目。 OpenFTS(开源全文搜索引擎)项目提供在线索引和数据库搜索的相当权重评分。 PostGIS项目给PostgreSQL增加了地理信息管理功能,允许用户将PostgreSQL作为GIS空间地理信息数据库使用,这和专业的ESRI公司的SDE系统以及Oracle的空间地理扩展模块功能相同。

其他高级功能包括表继承、规则和数据库事件响应功能等。表继承功能可以按原来的一个表创建一个有关系的新表,这样允许数据库设计人员可以将一个表作为基表,从基表派生出新表。并且PostgreSQL甚至可以使用此方式实现单级或多级的继承。

规则功能是用来调用查询的重算功能,允许数据库设计人员根据不同的表或视图来创建规则,以实现动态改变数据库原操作为新的操作的功能。

事件响应功能是一个内部通讯功能,它将系统信息或事件在用户使用的LISTEN和NOTIFY两条指令后进行传递,允许 简要的点对点通讯或是对指定数据库事件的定点通讯。由于信息可以从触发器或是存储过程中发出,PostgreSQL的用户可以监控类似更新、新增或是删除的数据库事件。

    高度可定制性

     PostgreSQL的存储过程开发可以使用众多的程序语言,包括Java、Perl、Python、Ruby、Tcl、C/C++和自带的PL/pgSQL,其中的PL/pgSQL与Oracle的PL/SQL很相似,内置了数百个函数,功能从基本的算术计算和字符串处理到加密逻辑计算并与Oracle有高度兼容性。触发器和存储过程可以使用C语言开发并可以作为内部库文件加载至数据库内部,开发上的巨大灵活性扩展了数据库能力。相应地,PostgreSQL也包括一套框架允许开发人员定义和创建他们自己的可在函数中使用数据类型,也可以定义操作符新的处理方式,具有了这样的能力后,PostgreSQL现已具有了各种高级数据类型,包括几何图形、空间地理、网络地址甚至于ISBN/ISSN(国际标准书号/国际标准序列号),这些都可以加入至系统中。

由于有很多的存储过程语言可以使用,这样也产生了很多的库接口,这样允许各种编译型或是解释型的语言在PostgreSQL进行使用,包括Java(JDBC)、ODBC、Perl、Python、Ruby、C、C++、PHP、Lisp、Scheme和Qt等。


二、版权声明

    PostgreSQL 使用PostgreSQL版权声明,它是类似BSD的版权。由于这个经 OSI认证的版权不限制PostgreSQL在商业环境和有 版权的应用程序中使用,因此被公认为是非常有灵活性和对商业应用是友好的。加上有多个公司的支持和源代码归属公共所有, 我们的版权使得PostgreSQL在那些希望在自己的产品里嵌入数据库的厂商中很流行,因为他们不用担心费用、嵌入软件的版权 锁以及版权条款的改变。


三、优势特性

        跨平台能力

PostgreSQL几乎可以所有Unix类操作系统下运行 (根据统计有至少34种平台),自8.0版本以后,在Windows平台下的也使用原生支持方式。

      大数据量环境下的设计

我们使用MVCC模式作为数据存储的策略,这样PostgreSQL可以在大数据量的环境下具有极高的响应性能。一些领先的商业私有数据库供应商基于相同的原因,也使用这种技术。

       图形化的数据库设计和管理工具

有很多高品质的图形化的PostgreSQL管理工具软件,包括开源和商业性质的。在我们的维基网站上有一个清单列出了PostgreSQL相关的图形化工具软件。

      技术特性列表

    下表列出了各个版本中不同功能的支持情况。将光标移至每一个功能名称上时会显示该功能更详细的解释。

  • 后台处理类

  • 性能类

  • 安全类

  • 网络类

  • 多字节/国际化类

  • 平台类

  • 数据类型

  • 函数和触发器类

  • 过程语言类

  • 扩展模块类

后台处理类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
64-bit large objects







Y
Advisory locks

Y Y Y Y Y Y Y
ALTER object IF EXISTS






Y Y
ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX





Y Y Y
Autovacuum enabled by default


Y Y Y Y Y Y
Cascading streaming replication






Y Y
Changing column types (ALTER TABLE .. ALTER COLUMN TYPE) Y Y Y Y Y Y Y Y Y
Checksum on data pages







Y
Column level permissions



Y Y Y Y Y
Common Table Expressions (WITH RECURSIVE)



Y Y Y Y Y
Concurrent GiST indexes
Y Y Y Y Y Y Y Y
COPY from/to STDIN/STDOUT







Y
COPY with arbitrary SELECT

Y Y Y Y Y Y Y
Crash-safe GiST indexes
Y Y Y Y Y Y Y Y
CREATE TABLE ... (LIKE) with foreign tables, views and composite types






Y Y
CSV support for COPY Y Y Y Y Y Y Y Y Y
Custom background workers







Y
Default permissions




Y Y Y Y
Deferrable unique constraints




Y Y Y Y
Disk based FSM



Y Y Y Y Y
Dollar Quoting Y Y Y Y Y Y Y Y Y
DROP object IF EXISTS

Y Y Y Y Y Y Y
Exclusion constraints




Y Y Y Y
EXPLAIN (BUFFERS) support




Y Y Y Y
Extension package installation





Y Y Y
Foreign data wrappers





Y Y Y
Foreign Tables





Y Y Y
Full code coverage generation support




Y Y Y Y
GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS




Y Y Y Y
Holdable cursors Y Y Y Y Y Y Y Y Y
Hot Standby




Y Y Y Y
Improved set of JSON functions and operators







Y
INSERT/UPDATE/DELETE RETURNING

Y Y Y Y Y Y Y
Integrated autovacuum daemon
Y Y Y Y Y Y Y Y
Join removal support




Y Y Y Y
LATERAL clause







Y
Loadable plugin infrastructure for monitoring the planner


Y Y Y Y Y Y
Materialized views







Y
Multiple autovacuum workers


Y Y Y Y Y Y
Multiple input aggregates

Y Y Y Y Y Y Y
Multirow VALUES

Y Y Y Y Y Y Y
MVCC safe CLUSTER


Y Y Y Y Y Y
Named restore points





Y Y Y
ON COMMIT clause for CREATE TEMPORARY TABLE Y Y Y Y Y Y Y Y Y
ORDER BY NULLS FIRST/LAST


Y Y Y Y Y Y
Parallel pg_dump







Y
Payload support for LISTEN/NOTIFY




Y Y Y Y
Per tablespace support for GUCs




Y Y Y Y
Per user/database server configuration settings




Y Y Y Y
Pg_basebackup tool





Y Y Y
pg_receivexlog tool






Y Y
Point-in-Time Recovery Y Y Y Y Y Y Y Y Y
Prefix support for text search synonym dictionary




Y Y Y Y
Row-wise comparison

Y Y Y Y Y Y Y
Savepoints Y Y Y Y Y Y Y Y Y
SELECT FOR NO KEY UPDATE/SELECT FOR KEY SHARE lock modes







Y
Serializable Snapshot Isolation





Y Y Y
SP-GiST indexes for range types







Y
SQLDA support for ECPG




Y Y Y Y
SQL-standard information schema Y Y Y Y Y Y Y Y Y
SQL standard interval handling



Y Y Y Y Y
Streaming-only cascading replication







Y
Streaming Replication




Y Y Y Y
Support for anonymous shared memory







Y
Synchronous replication





Y Y Y
TABLE statement



Y Y Y Y Y
Temporary VIEWs
Y Y Y Y Y Y Y Y
Two Phase commit
Y Y Y Y Y Y Y Y
Txid functions


Y Y Y Y Y Y
Typed tables




Y Y Y Y
UNNEST/array_agg



Y Y Y Y Y
Updatable views







Y
Updateable cursors


Y Y Y Y Y Y
Version aware psql



Y Y Y Y Y
Visibility map



Y Y Y Y Y
WAL-safe B-Tree Indexes Y Y Y Y Y Y Y Y Y
Warm Standby

Y Y Y Y Y Y Y
Window functions



Y Y Y Y Y
Writable Common Table Expressions





Y Y Y
Writable Foreign Data Wrappers







Y
XML, JSON and YAML output for EXPLAIN




Y Y Y Y
性能类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
Asynchronous Commit


Y Y Y Y Y Y
Automatic plan invalidation


Y Y Y Y Y Y
Background Checkpointer






Y Y
Background Writer Y Y Y Y Y Y Y Y Y
Cross datatype hashing support


Y Y Y Y Y Y
Distributed checkpointing


Y Y Y Y Y Y
Foreign keys marked as NOT VALID





Y Y Y
Full Text Search


Y Y Y Y Y Y
GIN (Generalized Inverted Index) Indexes

Y Y Y Y Y Y Y
GIN indexes partial match



Y Y Y Y Y
GiST (Generalized Search Tree) Indexes Y Y Y Y Y Y Y Y Y
Hashing support for DISTINCT/UNION/INTERSECT/EXCEPT



Y Y Y Y Y
Hashing support for FULL OUTER JOIN, LEFT OUTER JOIN and RIGHT OUTER JOIN





Y Y Y
Hashing support for NUMERIC


Y Y Y Y Y Y
Heap Only Tuples (HOT)


Y Y Y Y Y Y
Indexes on expressions Y Y Y Y Y Y Y Y Y
Index-only scans






Y Y
Index support for IS NULL


Y Y Y Y Y Y
Inlining of SQL-functions Y Y Y Y Y Y Y Y Y
In-memory Bitmap Indexes
Y Y Y Y Y Y Y Y
K-nearest neighbor GiST support





Y Y Y
Lazy XID allocation


Y Y Y Y Y Y
Multi-core scalability for read-only workloads






Y Y
Multiple temporary tablespaces


Y Y Y Y Y Y
Non-blocking CREATE INDEX

Y Y Y Y Y Y Y
Outer Join reordering

Y Y Y Y Y Y Y
Parallel restore



Y Y Y Y Y
Partial sort capability (top-n sorting)


Y Y Y Y Y Y
SELECT ... FOR UPDATE/SHARE NOWAIT
Y Y Y Y Y Y Y Y
Semi- and Antijoins



Y Y Y Y Y
Shared row level locking
Y Y Y Y Y Y Y Y
Space-Partitioned GiST Indexes






Y Y
Synchronized sequential scanning


Y Y Y Y Y Y
Table partitioning
Y Y Y Y Y Y Y Y
Tablespaces Y Y Y Y Y Y Y Y Y
Unlogged tables





Y Y Y
WAL Buffer auto-tuning





Y Y Y
安全类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
GSSAPI support


Y Y Y Y Y Y
Large object access controls




Y Y Y Y
Native LDAP authentication

Y Y Y Y Y Y Y
Native RADIUS authentication




Y Y Y Y
Per user/database connection limits
Y Y Y Y Y Y Y Y
ROLES
Y Y Y Y Y Y Y Y
Search+bind mode operation for LDAP authentication




Y Y Y Y
security_barrier option on views






Y Y
Security Service Provider Interface (SSPI)


Y Y Y Y Y Y
SSL certificate validation in libpq



Y Y Y Y Y
SSL client certificate authentication



Y Y Y Y Y
SSPI authentication via GSSAPI





Y Y Y
Network 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
Full SSL support Y Y Y Y Y Y Y Y Y
IPv6 Support Y Y Y Y Y Y Y Y Y
V2 client protocol Y Y Y Y Y Y Y Y Y
V3 client protocol Y Y Y Y Y Y Y Y Y
多字节/国际化类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
Column-level collation support





Y Y Y
Database level Collation



Y Y Y Y Y
EUC_JIS_2004/ SHIFT_JIS_2004 support


Y Y Y Y Y Y
Multibyte encoding support, incl. UTF8 Y Y Y Y Y Y Y Y Y
Multiple language support Y Y Y Y Y Y Y Y Y
Unicode string literals and identifiers



Y Y Y Y Y
UTF8 support on Windows
Y Y Y Y Y Y Y Y
平台类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
Microsoft Visual C++ Support


Y Y Y Y Y Y
Native Windows Port Y Y Y Y Y Y Y Y Y
Spinlock support for the SuperH hardware platform




Y Y Y Y
Sun Studio compiler on Linux



Y Y Y Y Y
Windows x64 support




Y Y Y Y
数据类型 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
Arrays of compound types


Y Y Y Y Y Y
Array support Y Y Y Y Y Y Y Y Y
ENUM data type


Y Y Y Y Y Y
GUID/UUID data type


Y Y Y Y Y Y
IS0 8601 interval syntax



Y Y Y Y Y
JSON data type






Y Y
NULLs in Array

Y Y Y Y Y Y Y
Range types






Y Y
smallserial type






Y Y
Type modifier support


Y Y Y Y Y Y
XML data type


Y Y Y Y Y Y
函数和触发器类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
ALTER TABLE ENABLE/DISABLE TRIGGER
Y Y Y Y Y Y Y Y
ALTER TABLE / ENABLE REPLICA TRIGGER/RULE


Y Y Y Y Y Y
Column level triggers




Y Y Y Y
Event triggers







Y
Function argument names




Y Y Y Y
ORDER BY support within aggregates




Y Y Y Y
Per function GUC settings


Y Y Y Y Y Y
Per function statistics



Y Y Y Y Y
RETURN QUERY EXECUTE



Y Y Y Y Y
RETURNS TABLE



Y Y Y Y Y
Statement level triggers Y Y Y Y Y Y Y Y Y
Statement level TRUNCATE triggers



Y Y Y Y Y
Triggers on views





Y Y Y
Variadic functions



Y Y Y Y Y
WHEN clause for CREATE TRIGGER




Y Y Y Y
过程语言类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
CASE in pl/pgsql



Y Y Y Y Y
CONTINUE statement for PL/pgSQL
Y Y Y Y Y Y Y Y
DO statement for pl/perl




Y Y Y Y
DO statement for pl/pgsql




Y Y Y Y
EXCEPTION support in PL/pgSQL Y Y Y Y Y Y Y Y Y
EXECUTE USING in PL/pgSQL



Y Y Y Y Y
FOREACH IN ARRAY in pl/pgsql





Y Y Y
IN/OUT/INOUT parameters for pl/pgsql and PL/SQL
Y Y Y Y Y Y Y Y
Named parameters Y Y Y Y Y Y Y Y Y
Non-superuser language creation


Y Y Y Y Y Y
Number of function arguments increased to 100
Y Y Y Y Y Y Y Y
pl/pgsql installed by default




Y Y Y Y
Polymorphic functions Y Y Y Y Y Y Y Y Y
Python 3 support for pl/python




Y Y Y Y
Qualified function parameters


Y Y Y Y Y Y
RETURN QUERY in pl/pgsql


Y Y Y Y Y Y
ROWS and COST specification for functions


Y Y Y Y Y Y
Scrollable and updatable cursor support for pl/pgsql


Y Y Y Y Y Y
SQLERRM/SQLSTATE for pl/pgsql
Y Y Y Y Y Y Y Y
Unicode object support in PL/python




Y Y Y Y
User defined exceptions



Y Y Y Y Y
Validator function for pl/perl
Y Y Y Y Y Y Y Y
扩展模块类 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
contrib/adminpack

Y Y Y Y Y Y Y
contrib/auth_delay





Y Y Y
contrib/autoexplain



Y Y Y Y Y
contrib/btree_gin



Y Y Y Y Y
contrib/btree_gist Y Y Y Y Y Y Y Y Y
contrib/citext



Y Y Y Y Y
contrib/dblink Y Y Y Y Y Y Y Y Y
contrib/dblink asyncronous notification support




Y Y Y Y
contrib/dbsize Y 废弃 废弃 废弃 废弃 废弃 废弃 废弃 废弃
contrib/file_fdw





Y Y Y
contrib/fuzzystrmatch Y Y Y Y Y Y Y Y Y
contrib/hstore

Y Y Y Y Y Y Y
contrib/hstore improvements




Y Y Y Y
contrib/intarray Y Y Y Y Y Y Y Y Y
contrib/isn (ISBN)

Y Y Y Y Y Y Y
contrib/ltree Y Y Y Y Y Y Y Y Y
contrib/pageinspect


Y Y Y Y Y Y
contrib/passwordcheck




Y Y Y Y
contrib/pg_autovacuum Y 废弃 废弃 废弃 废弃 废弃 废弃 废弃 废弃
contrib/pgbench Y Y Y Y Y Y Y Y Y
contrib/pg_buffercache
Y Y Y Y Y Y Y Y
contrib/pg_freespacemap

Y Y Y Y Y Y Y
contrib/pg_standby


Y Y Y Y Y Y
contrib/pg_stat_statements



Y Y Y Y Y
contrib/pg_stat_statements improvements






Y Y
contrib/pgstattuple Y Y Y Y Y Y Y Y Y
contrib/pg_trgm Y Y Y Y Y Y Y Y Y
contrib/pg_trgm regular expressions indexing







Y
contrib/pg_upgrade




Y Y Y Y
contrib/pg_xlogdump







Y
contrib/postgres_fdw







Y
contrib/seg Y Y Y Y Y Y Y Y Y
contrib/sepgsql





Y Y Y
contrib/sslinfo

Y Y Y Y Y Y Y
contrib/tablefunc Y Y Y Y Y Y Y Y Y
contrib/tcn






Y Y
contrib/tsearch2 Y Y Y 废弃 废弃 废弃 废弃 废弃 废弃
contrib/tsearch2 compat wrapper


Y Y Y Y Y Y
contrib/tsearch2 UTF8 support

Y 废弃 废弃 废弃 废弃 废弃 废弃
contrib/unaccent




Y Y Y Y
contrib/userlocks Y Y 废弃 废弃 废弃 废弃 废弃 废弃 废弃
contrib/uuid-ossp


Y Y Y Y Y Y
contrib/xml2 Y Y Y Y 废弃 废弃 废弃 废弃 废弃

你可能感兴趣的:(PostgreSQL,版权声明,优秀特性)