pg_copy_from

(PHP 4 >= 4.2.0, PHP 5)

pg_copy_from Вставляет записи из массива в таблицу

Описание

bool pg_copy_from ( resource $connection , string $table_name , array $rows [, string $delimiter [, string $null_as ]] )

pg_copy_from() вставляет записи в таблицу из массива rows. В ходе выполнения вызывает SQL команду COPY FROM для вставки записей.

Список параметров

connection

Ресурс соединения с базой данных PostgreSQL.

table_name

Имя таблицы, в которую копируются значения из rows.

rows

Массив (array) данных для копирования в table_name. Каждое значение в rows становится строкой в table_name. Каждое значение массива rows должно быть строкой с разделителем, содержащей значения для вставки в каждое поле таблицы. Значения должны заканчиваться символом перевода строки.

delimiter

Символ, отделяющий значения друг от друга в каждом элементе массива rows. По-умолчанию TAB.

null_as

Определяет, каким образом значения SQL NULL представлены в массиве rows. По-умолчанию \N ("\\N").

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования pg_copy_from()

<?php
   $db 
pg_connect("dbname=publisher") or die("Не удается создать подключение");
   
   
$rows pg_copy_to($db$table_name);
   
   
pg_query($db"DELETE FROM $table_name");
   
   
pg_copy_from($db$table_name$rows);
?>

Смотрите также

  • pg_copy_to() - Копирует данные из таблицы в массив

Коментарии

Автор:
Something needs to be said about the format of the array.
Judging by what I've seen, it's pretty much what you get
from loading a tab-separated file with file(). That is, the
lines are linefeed-terminated and there's no need to have
an extra line with "\.". On the other hand, when I try using this
command the connection to the server ends up in some odd
state and is then lost:
PHP Warning:  USo() query failed: server closed the connection unexpectedly

I think it might be safer to use the lower-level function
pg_put_line() for now.
2002-09-10 06:06:52
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
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)
2003-03-19 15:38:45
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
pg syntax is :
COPY test (cola, colb, colc) FROM stdin;
...

this function doesn't let you in which order the columns are !
2007-08-26 17:24:13
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
Автор:
see also: pg_put_line for a solution that does not require buffering of all the data to be copied,
2009-06-11 06:08:05
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
Автор:
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);
?>
2011-02-18 04:39:45
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
Автор:
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");
?>
2012-01-26 12:40:41
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html
Автор:
Default is "\\\N" not "\\N" at least in php 5.4

pg_copy_from($db, $table_name, "\t", "\\\N")
2014-02-25 10:26:33
http://php5.kiev.ua/manual/ru/function.pg-copy-from.html

    Поддержать сайт на родительском проекте КГБ