PostgreSQL 是一个开放源码的免费数据库系统。Postgres 最初由加州大学伯克利分校计算机科学系开发,倡导了很多关系对象的观念,这些观念现在已经用在一些商业数据库系统中。它提供了 SQL92/SQL99 语言支持,事务处理,引用集成,存储过程以及类型扩展。PostgreSQL 则是 Postgres 的一个开放源代码的后代。
要使用 PostgreSQL 支持,需要 PostgreSQL 6.5 或更新版本,PostgreSQL 7.0 或更新版本来使用所有的 PostgreSQL 模块。PostgreSQL 支持多种字符编码包括多字节字符编码。关于 PostgreSQL 的当前版本以及更多信息见 http://www.postgresql.org/ 以及 http://techdocs.postgresql.org/。
为添加 PostgreSQL 支持,在编译 PHP 时需要加上 --with-pgsql[=DIR] 选项。如果可以用共享模块方式,PostgreSQL 模块可以在 php.ini 用 extension 指令或者 dl() 函数加载。
这些函数的行为受到全局配置文件 php.ini 的影响。
表格 1. PostgreSQL 配置选项
名称 | 默认值 | 可变范围 |
---|---|---|
pgsql.allow_persistent | "1" | PHP_INI_SYSTEM |
pgsql.max_persistent | "-1" | PHP_INI_SYSTEM |
pgsql.max_links | "-1" | PHP_INI_SYSTEM |
pgsql.auto_reset_persistent | "0" | PHP_INI_SYSTEM |
pgsql.ignore_notice | "0" | PHP_INI_ALL |
pgsql.log_notice | "0" | PHP_INI_ALL |
以下是该配置选项的简要解释。
是否允许持久的 Postgres 连接。
每个进程所能有的持久 Postgres 连接数目。
每个进程所能有的 Postgres 连接数目,包括持久连接。
检测用在 pg_pconnect() 上的中断了的持久连接。需要一些损耗。
是否忽略 PostgreSQL 后端的通告。
是否记录 PostgreSQL 后端的通告消息。要记录通告消息日志,PHP 指令 pgsql.ignore_notice 必须为 off。
警告 |
由于 notice message handling 代码中的 bug,不推荐在 PHP 4.0.6 中使用 PostgreSQL 模块。使用 4.1.0 或更新版本。 |
警告 | ||||||||||||||||||||||||||||||||||||||||||||
为符合当前编码标准,PostgreSQL 函数名称将在 4.2.0 版本中改变。大多数新名称将多出一个下划线,例如 pg_lo_open()。一部分函数则改变了名称以保持一致性。例如 pg_exec() 改为 pg_query()。老的函数名依然可以在 4.2.0 和以后的少数几个版本中使用,但以后可能会删除。 表格 2. 已改变的函数名
为以后支持异步连接,将不再提倡用旧语法使用函数 pg_connect()/pg_pconnect()。请用连接字符串作为参数来使用函数 pg_connect() 和 pg_pconnect()。 |
不是所有的版本都支持所有的函数,这和 libpq 的版本和编译方法有关。如果编译源代码时少了一个函数,那么 libpq 就不支持需要该函数的功能。
不要使用比 PostgreSQL 服务器连接所接受更旧版本的 libpq 也很重要。如果你用的 libpq 版本比 PostgreSQL 服务器预期的低就可能出现问题。
PostgreSQL 在 6.3 (03/02/1998) 版之后默认使用 unix domain sockets,默认状态下不会打开 TCP 端口。下面这张表说明了各种新建连接的可能性。TCP/IP socket 放在 /tmp/.s.PGSQL.5432。该选项可用 postmaster 中的 '-i' 参数打开,它表示“监视 TCP/IP 端口以及 Unix domain socket”。
表格 3. Postmaster 和 PHP
Postmaster | PHP | 状态 |
---|---|---|
postmaster & | pg_connect("dbname=MyDbName"); | OK |
postmaster -i & | pg_connect("dbname=MyDbName"); | OK |
postmaster & | pg_connect("host=localhost dbname=MyDbName"); | Unable to connect to PostgreSQL server: connectDB() failed: Is the postmaster running and accepting TCP/IP (with -i) connection at 'localhost' on port '5432'? in /path/to/file.php on line 20. |
postmaster -i & | pg_connect("host=localhost dbname=MyDbName"); | OK |
到 PostgreSQL 服务器的连接可以通过以下命令串中的参数对建立:$conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions dbname=myDB user=myUser password=myPassword");
以前的语法: $conn = pg_connect ("host", "port", "options", "tty", "dbname") 已经不再提倡使用。
环境变量会影响 PostgreSQL 服务器/客户机的行为。例如如果连接串中省略了主机名,PostgreSQL 模块将会查找环境变量 PGHOST。 不同版本所支持的环境变量不同,详情参考 PostgreSQL Programmers's Manual (libpq - Environment Variables)。
确认已经给适当的用户设置了环境变量。用 $_ENV 或 getenv() 来检查当前进程可以使用哪些环境变量。
由于这些常量是由该扩展模块定义的,因此只有在该扩展模块被编译到 PHP 中,或者在运行时被动态加载后,这些常量才有效。
从 PostgreSQL 7.1.0 开始,在一个 text 类型字段中最多可以储存 1GB 的数据。在老版本中则限制为一个块的大小(默认 8KB,最大 32KB,编译时指定)。
要使用 large object (lo) 接口,需要把 large object 函数放在一个事务段中。事务段以 SQL 语句 BEGIN 开始,如果该事务合法,以 COMMIT 或者 END结束,如果该事务失败,则以 ROLLBACK 或者 ABORT结束。