This is the function you need if you are running into the infamous "must be superuser to COPY to or from a file" error from postgres.
(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)
pg_put_line — Sendet eine NULL-terminierte Zeichenkette zum PostgreSQL-Server
pg_put_line() sendet eine NULL-terminierte
Zeichenkette an den PostgreSQL-Server. Das ist in Verbindung mit dem
PostgreSQL-Befehl COPY FROM
notwendig.
COPY
ist eine PostgreSQL-Anweisung, mit der Daten
mit hoher Geschwindigkeit in eine Tabelle eingefügt werden können. Die
Daten werden ungeparst und in einer einzigen Transaktion übertragen.
Alternativ zu pg_put_line() kann pg_copy_from() verwendet werden. Dies ist weitaus einfacher.
Hinweis:
Eine Anwendung muss explizit die beiden Zeichen "\." in der letzten Zeile an PostgreSQL übertragen, um anzuzeigen, dass die Datenübertragung beendet ist, bevor pg_end_copy() aufgerufen wird.
Die Verwendung von pg_put_line() führt bei den meisten Operationen mit Large Objects zu Fehlern. So etwa bei pg_lo_read() und pg_lo_tell(). Stattdessen sollten Sie pg_copy_from() und pg_copy_to() benutzen.
connection
Eine PgSql\Connection-Instanz.
Falls connection
nicht angegeben wurde, wird die Standardverbindung benutzt.
Das ist die zuletzt mit pg_connect() oder pg_pconnect() aufgebaute Verbindung.
Seit PHP 8.1.0 ist die Verwendung der Standardverbindung veraltet.
data
Eine Textzeile, die direkt an den PostgreSQL Datenbankserver
gesendet wird. Dabei wird automatisch ein NULL
an das Zeilenende angehängt.
Version | Beschreibung |
---|---|
8.1.0 |
Der Parameter connection erwartet nun eine PgSql\Connection-Instanz;
vorher wurde eine Ressource erwartet.
|
Beispiel #1 pg_put_line() Beispiel
<?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);
?>
This is the function you need if you are running into the infamous "must be superuser to COPY to or from a file" error from postgres.
When using this function, don't get bit by using 'literal\tanotherliteral\n' issue by using single quotes vs. double quotes. "literal\tanotherliteral\n" is not the same. Many of the functions are impacted on how double quotes treats escape characters different than single quotes. I forget it all the time.