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 — Передаёт на PostgreSQL сервер строку с завершающим нулём
pg_put_line() передаёт на PostgreSQL сервер
строку с завершающим нулём. Завершение строки значением NULL
необходимо при её объединении с командой PostgreSQL
COPY FROM
.
COPY
является высокоскоростным интерфейсом
передачи данных, поддерживаемым PostgreSQL. Данные передаются
одной транзакцией и не разбираются парсером.
В качестве альтернативы можно использовать функцию 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
Текстовая строка для прямой пересылки на сервер. Завершающий
NULL
добавляется автоматически.
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Версия | Описание |
---|---|
8.1.0 |
Параметр connection теперь ожидает экземпляр PgSql\Connection; ранее ожидался ресурс (resource).
|
Пример #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);
?>
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.