PostgreSQL 是一个开放源码的免费数据库系统。Postgres 最初由加州大学伯克利分校计算机科学系开发,倡导了很多关系对象的观念,这些观念现在已经用在一些商业数据库系统中。它提供了 SQL92/SQL99 语言支持,事务处理,引用集成,存储过程以及类型扩展。PostgreSQL 则是 Postgres 的一个开放源代码的后代。
要使用 PostgreSQL 支持,需要 PostgreSQL 6.5 或更新版本,PostgreSQL 8.0 或更新版本来使用所有的 PostgreSQL 模块。PostgreSQL 支持多种字符编码包括多字节字符编码。关于 PostgreSQL 的当前版本以及更多信息见 » http://www.postgresql.org/ 以及 » PostgreSQL 文档。
为添加 PostgreSQL 支持,在编译 PHP 时需要加上 --with-pgsql[=DIR] 选项。如果可以用共享模块方式,PostgreSQL 模块可以在 php.ini 用 extension 指令或者 dl() 函数加载。
这些函数的行为受 php.ini 的影响。
名称 | 默认值 | 可变范围 | 更新日志 |
---|---|---|---|
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 | 从 PHP 4.2.0 起开始存在 |
pgsql.ignore_notice | "0" | PHP_INI_ALL | 从 PHP 4.3.0 起开始存在 |
pgsql.log_notice | "0" | PHP_INI_ALL | 从 PHP 4.3.0 起开始存在 |
以下是配置选项的简要解释。
是否允许持久的 Postgres 连接。
每个进程所能有的持久 Postgres 连接数目。
每个进程所能有的 Postgres 连接数目,包括持久连接。
检测用在 pg_pconnect() 上的中断了的持久连接。需要一些损耗。
是否忽略 PostgreSQL 后端的通告。
是否记录 PostgreSQL 后端的通告消息。要记录通告消息日志,PHP 指令 pgsql.ignore_notice 必须为 off。
PostgreSQL 模块使用了两种资源类型。第一种是数据库连接的标识符,第二种是保存查询结果的资源。
以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。
Note: 不是所有的版本都支持所有的函数,这和 libpq(PostgreSQL C 客户端库)的版本和编译方法有关。如果 PHP 的 PostgreSQL 扩展不见了,那是因为 libpq 的版本不支持它。
Note: 大多数 PostgreSQL 函数接受 connection 作为第一个可选参数。如果没有提供,则使用上一个打开的连接。如果没有打开的连接,函数返回 FALSE。
Note: PostgreSQL 在创建对象和查询时自动将所有标识符(例如表/列名)转成小写字母值。要强制其使用混合或大写字母的标识符,必须将标识符用双引号(")转义。
Note: PostgreSQL 没有特殊的命令来取得数据库的结构信息(例如当前数据库中的所有表)。不过在 PostgreSQL 7.4 及以上版本有一个标准结构名叫 information_schema,它包含有系统视图以及所有必要的信息,可以很容易地查询出来。其细节见 » PostgreSQL 文档。
此简单例子演示了 PostgreSQL 数据库的连接,执行查询,显示结果以及断开连接。
Example#1 PostgreSQL 例子
<?php
// 连接,选择数据库
$dbconn = pg_connect("host=localhost dbname=publishing user=www password=foo")
or die('Could not connect: ' . pg_last_error());
// 执行 SQL 查询
$query = 'SELECT * FROM authors';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
// 用 HTML 显示结果
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// 释放结果集
pg_free_result($result);
// 关闭连接
pg_close($dbconn);
?>