http://www.oschina.net/p/postgresql
http://baike.baidu.com/view/28196.htm
PostgreSQL (也叫 Postgres)
- BSD许可证下发行。
- PostgreSQL 是一种关系型数据库管理系统 (RDBMS)。 这意味着它是一种用于管理那些以关系形式存储数据的系统。 关系实际上是表的数学称呼。 今天,把数据存储在表里的概念已经快成了固有的常识了, 但是还有其它的一些方法用于组织数据库。每个表都是一个命名的行的集合。 每一行由一组相同的命名字段组成。 而且每一字段都有一特定的类型。虽然每字段在每行里的位置是固定的, 但一定要记住 SQL 并未对行在表中的顺序做任何保证(但你可以对它们进行明确的排序进行显示)。表组成数据库,一个由某个 PostgreSQL 服务器管理的数据库集合组成一个数据库集群。
- 在类 Unix 操作系统上的文件和目录就形成了一种层次数据库的例子。
- 更现代的发展是面向对象的数据库。
- 在数据库术语里,PostgreSQL 使用一种客户端/服务器的模式。数据库服务器程序叫做postmaster。
- PostgreSQL 服务器可以处理来自客户端的多个并发请求。 因此,它为每个请求启动("fork")一个新的进程。
- 在服务器端: createdb dropdb
客户端:psql
PostgreSQL负载均衡中间件 PGpool,pgpool-II 是运行于 PostgreSQL 数据库服务器和客户端之间的一个中间件,提供的功能包括:连接池、复制、负载均衡、客户端限制和并行查询等。
pgbouncer 是 PostgreSQL 的轻量的连接池,支持三种模式。
- Session pooling/会话连接池
最礼貌的方法。在客户端连接的时候,在它的连接生命期内,会给它赋予一个服务器连接。在客户端断开的时候,服务器连接会放回到连接池中。
- Transaction pooling/事务连接池
服务器连接只有在一个事务里的时候才赋予客户端。在 PgBouncer 注意到事务结束的时候,服务器将会放回连接池中。这是一个 hack,因为它打破了应用对后段连接的看法。只有在应用配合这样的使用模式,没有使用会破坏这种使用模式的时候才能用这个连接方式。参阅下标获取会破坏 这种模式的特性。
- Statement pooling/语句连接池
最激进的模式。这是事务连接池的一个扭曲的变种 - 不允许多语句的事务。这就意味着是在客户端强制“autocomit”模式,主要是给 PL/Proxy 用的。
内存需求低(缺省的时候每个连接 2k)。这事因为 PgBouncer 不需要一次就看到完整的包。
它不是和单个后端服务器绑定的,目标数据库可以位于不同的主机上。
对大多数设置,都支持在线的重新配置,无需重启。
支持在线的重启/升级,而不会退出客户端的连接。
只支持协议 V3 版本,因此后段版本必须 >= 7.4。
特性 会话连接池 事务连接池
启动参数 支持 [0] 支持 [0]
SET/RESET 支持 从不支持
LISTEN/NOTIFY 支持从不支持
WITHOUT HOLD CURSOR 支持支持
WITH HOLD CURSOR 支持 [1]从不支持
协议级别的准备好的规划 支持 [1]不支持 [2]
PREPARE / DEALLOCATE 支持 [1]从不支持
ON COMMIT DROP 临时表 支持支持
PRESERVE/DELETE ROWS 临时表 支持 [1]从不支持
重置缓存的规划 支持 [1]支持 [1]
LOAD 语句 支持 从不支持
[0] - 启动参数是: client_encoding,datestyle,timezone 和 standard_conforming_strings。PgBouncer 会判断这些参数的变化并且它能保证对客户端来说是一致的。从 PgBouncer 1.1 开始可用。
[1] - 完全透明要求 PostgreSQL 8.3 和 PgBouncer 1.1,并且还要设置 server_reset_query = DISCARD ALL
[2] - 我们可以在 PgBouncer 里添加那部分支持。
C语言中嵌套PostgreSQL的代码,使用“安装PostgreSQL所自带的ECPG库”。