pg_copy_from

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

pg_copy_from Wstawia wiersze do tabeli z tablicy

Opis

pg_copy_from ( resource $połączenie , string $nazwa_tabeli , array $wiersze [, string $delimiter [, string $null_jako ]] ) : bool

pg_copy_from() wstawia wiersze do tabeli z tablicy wiersze. Wywołuje wewnętrznie polecenie SQL COPY FROM aby wstawić wiersze. Zwraca TRUE w przypadku powodzenia, FALSE w przypadku błędu.

Parametry

połączenie

Zasób, połączenie do bazy danych PostgreSQL.

nazwa_tabeli

Nazwa tabeli do której będą kopiowane wiersze.

wiersze

Tablica danych, które będą skopiowane do nazwa_tabeli. Każda wartość w wiersze stanie się wierszem w nazwa_tabeli. Każda wartość w wiersze powinna być łańcuchem znaków rozdzielonych wartości do wstawienia w każde pole. Wartości powinny być zakończone przejściem do nowej linii.

delimiter

Symbol jaki rozdziela wartości dla każdego pola w każdym elemencie wiersza. Domyślnie jest to TAB.

null_jako

Jak wartość SQL NULL jest reprezentowana w wierszu. Domyślnie jest to \N ("\\N").

Zwracane wartości

Zwraca TRUE w przypadku powodzenia, FALSE w przypadku błędu.

Przykłady

Przykład #1 pg_copy_from() przykład

<?php
   $db 
pg_connect("dbname=publisher") or die("Nie można się połączyć");
   
   
$rows pg_copy_to($db$table_name);
   
   
pg_query($db"DELETE FROM $table_name");
   
   
pg_copy_from($db$table_name$rows);
?>

Zobacz też:

add a note add a note

User Contributed Notes 8 notes

up
2
Dave
6 years ago
Default is "\\\N" not "\\N" at least in php 5.4

pg_copy_from($db, $table_name, "\t", "\\\N")
up
1
karlo dot petravic at hotmail dot com
1 year ago
As table name you can also specify columns you want imported.

Will import all columns:
<?php
pg_copy_from
($db, 'cpm.ics', $rows);
?>

Will import only specified columns:
<?php
pg_copy_from
($db, 'cpm.ics (type, product, date, count, amount)', $rows);
?>
up
1
Anonymous
11 years ago
see also: pg_put_line for a solution that does not require buffering of all the data to be copied,
up
0
Dave
8 years ago
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");
?>
up
0
kapouer_php at melix dot org
13 years ago
pg syntax is :
COPY test (cola, colb, colc) FROM stdin;
...

this function doesn't let you in which order the columns are !
up
0
vlad at php dot net
17 years ago
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)
up
-1
carl at thep.lu.se
18 years ago
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.
up
-9
Dave
9 years ago
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);
?>
To Top