如果遇到 postgres 中臭名昭著的 "must be superuser to COPY to or from a file" 错误,则需要此函数。
(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)
pg_put_line — 向 PostgreSQL 后端发送以 NULL 结尾的字符串
pg_put_line() 向 PostgreSQL 后端服务器发送以 NULL 结尾的字符串。这需要与 PostgreSQL 的 COPY FROM
命令结合使用。
COPY
是 PostgreSQL 支持的一种高速数据加载接口。数据在不进行解析的情况下以单一事务的方式传递。
使用原始 pg_put_line() 命令的另一种方法是使用 pg_copy_from()。这是一个更简单的接口。
注意:
应用程序必须在最后一行明确发送两个字符 "\.",以指示后端已完成发送数据,然后再发出 pg_end_copy()。
使用 pg_put_line() 会导致大多数大对象操作(包括 pg_lo_read() 和 pg_lo_tell())随后失败。你可以改用 pg_copy_from() 和 pg_copy_to()。
connection
一个 PgSql\Connection 实例。当 connection
未指定时,将使用默认连接。默认连接是 pg_connect() 或 pg_pconnect() 最后建立的连接。
从 PHP 8.1.0 开始,使用默认连接已弃用。
data
要直接发送到 PostgreSQL 后端的文本行。将自动添加一个 NULL
终止符。
版本 | 说明 |
---|---|
8.1.0 | connection 参数现在需要一个 PgSql\Connection 实例;以前需要一个 资源。 |
示例 #1 pg_put_line() 示例
<?php
$conn = pg_pconnect("dbname=foo");
pg_query($conn, "create table bar (a int4, b char(16), d float8)");
pg_query($conn, "copy bar from stdin");
pg_put_line($conn, "3\thello world\t4.5\n");
pg_put_line($conn, "4\tgoodbye world\t7.11\n");
pg_put_line($conn, "\\.\n");
pg_end_copy($conn);
?>
如果遇到 postgres 中臭名昭著的 "must be superuser to COPY to or from a file" 错误,则需要此函数。
使用此函数时,不要被使用单引号与双引号引起的 'literal\tanotherliteral\n' 问题所困扰。 "literal\tanotherliteral\n" 并不相同。许多函数在双引号如何处理转义字符方面与单引号不同。我一直都会忘记。