PostgreSQL 数据库函数库
PostgreSQL
&reftitle.intro;
PostgreSQL 是一个开放源码的免费数据库系统。Postgres
最初由加州大学伯克利分校计算机科学系开发,倡导了很多关系对象的观念,这些观念现在已经用在一些商业数据库系统中。它提供了
SQL92/SQL99 语言支持,事务处理,引用集成,存储过程以及类型扩展。PostgreSQL 则是
Postgres 的一个开放源代码的后代。
&reftitle.required;
要使用 PostgreSQL 支持,需要 PostgreSQL 6.5 或更新版本,PostgreSQL 7.0
或更新版本来使用所有的 PostgreSQL 模块。PostgreSQL
支持多种字符编码包括多字节字符编码。关于 PostgreSQL
的当前版本以及更多信息见 &url.pgsql;
以及 &url.pgsql.techdocs;。
&reference.pgsql.configure;
&reference.pgsql.ini;
使用方法及提示
由于 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 和以后的少数几个版本中使用,但以后可能会删除。
已改变的函数名
旧名称
新名称
pg_exec
pg_query
pg_getlastoid
pg_last_oid
pg_cmdtuples
pg_affected_rows
pg_numrows
pg_num_rows
pg_numfields
pg_num_fields
pg_fieldname
pg_field_name
pg_fieldsize
pg_field_size
pg_fieldnum
pg_field_num
pg_fieldprtlen
pg_field_prtlen
pg_fieldisnull
pg_field_is_null
pg_freeresult
pg_free_result
pg_result
pg_fetch_result
pg_loreadall
pg_lo_read_all
pg_locreate
pg_lo_create
pg_lounlink
pg_lo_unlink
pg_loopen
pg_lo_open
pg_loclose
pg_lo_close
pg_loread
pg_lo_read
pg_lowrite
pg_lo_write
pg_loimport
pg_lo_import
pg_loexport
pg_lo_export
为以后支持异步连接,将不再提倡用旧语法使用函数 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”。
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 来检查当前进程可以使用哪些环境变量。
设定默认参数
&reference.pgsql.constants;
&reftitle.examples;
从 PostgreSQL 7.1.0 开始,在一个 text 类型字段中最多可以储存 1GB 的数据。在老版本中则限制为一个块的大小(默认 8KB,最大 32KB,编译时指定)。
要使用 large object (lo) 接口,需要把 large object 函数放在一个事务段中。事务段以 SQL 语句 BEGIN 开始,如果该事务合法,以 COMMIT 或者 END结束,如果该事务失败,则以 ROLLBACK 或者 ABORT结束。
使用 Large Object
]]>
在关闭 large object 之前不应关闭到 PostgreSQL 服务器的连接。
&reference.pgsql.functions;