©
This document uses PHP Chinese website manual Release
(PHP 4 >= 4.2.0, PHP 5)
pg_copy_from — 根据数组将记录插入表中
$connection
, string $table_name
, array $rows
[, string $delimiter
[, string $null_as
]] ) pg_copy_from() 将数组 rows
的内容作为记录插入表中。它在内部使用了 COPY FROM SQL 命令来插入记录。
connection
PostgreSQL database connection resource.
table_name
Name of the table into which to copy the rows
.
rows
An array of data to be copied into table_name
.
Each value in rows
becomes a row in table_name
.
Each value in rows
should be a delimited string of the values
to insert into each field. Values should be linefeed terminated.
delimiter
The token that separates values for each field in each element of
rows
. Default is TAB.
null_as
How SQL NULL values are represented in the
rows
. Default is \N ("\N").
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 pg_copy_from() example
<?php
$db = pg_connect ( "dbname=publisher" ) or die( "Could not connect" );
$rows = pg_copy_to ( $db , $table_name );
pg_query ( $db , "DELETE FROM $table_name " );
pg_copy_from ( $db , $table_name , $rows );
?>
[#1] Dave [2014-02-25 08:26:33]
Default is "\\\N" not "\\N" at least in php 5.4
pg_copy_from($db, $table_name, "\t", "\\\N")
[#2] Dave [2012-01-26 10:40:41]
As of postgresql 9.1 "standard_conforming_strings" is set to on
This will not work anymore
<?php
$copy_message = "1\t\\N\t300";
pg_copy_from($db, "message", $copy_message);
?>
result will be a "N" in that field. if the field allow text that is else it will fail to insert the post.
simple fix
<?php
$copy_message = "1\t\\NULL\t300";
pg_copy_from($db, "message", $copy_message, "\t","\\NULL");
?>
[#3] Dave [2011-02-18 02:39:45]
Fix for "Copy command failed: ERROR: literal carriage return
found in data" or
"Copy command failed: ERROR: missing data for column
"message" CONTEXT: COPY message, line 1:"
<?php
$message = "HEJ\rHEJ\nHEJ\r\nHEJ\n\rHEJ\tHELLO\\";
$message = addslashes($message);
$message = str_replace(
array("\n","\r","\t"),
array("\\n","\\r","\\t"),
$message);
$copy_message = "1\t". $message ."\t300";
pg_copy_from($db, "message", $copy_message);
?>
[#4] Anonymous [2009-06-11 03:08:05]
see also: pg_put_line for a solution that does not require buffering of all the data to be copied,
[#5] kapouer_php at melix dot org [2007-08-26 14:24:13]
pg syntax is :
COPY test (cola, colb, colc) FROM stdin;
...
this function doesn't let you in which order the columns are !
[#6] vlad at php dot net [2003-03-19 13:38:45]
By default NULL values are a backslash followed with capital N ("\\N").
Also, you can't insert entries with OIDs (I've added it to my TODO list though)
[#7] carl at thep.lu.se [2002-09-10 03:06:52]