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 — Envia uma string terminada em NULL para o backend do PostgreSQL
pg_put_line() envia uma string terminada em NULL
para o servidor backend do PostgreSQL. Isto é necessário em conjunto
com o comando COPY FROM
do PostgreSQL.
COPY
é uma interface de carregamento de dados de alta velocidade
suportada pelo PostgreSQL. Os dados são transmitidos sem serem analisados
e em uma única transação.
Uma alternativa ao uso de comandos pg_put_line() brutos é usar pg_copy_from(). Esta é uma interface muito mais simples.
Nota:
A aplicação deve enviar explicitamente os dois caracteres "\." na última linha para indicar ao backend que terminou de enviar seus dados, antes de emitir pg_end_copy().
O uso de pg_put_line() faz com que a maioria das operações de objetos grandes, incluindo pg_lo_read() e pg_lo_tell(), falhem posteriormente. Você pode usar pg_copy_from() e pg_copy_to() no lugar.
connection
Uma instância de PgSql\Connection.
Quando o parâmetro connection
não for especificado, a conexão padrão será usada.
A conexão padrão é a última conexão feita por pg_connect()
ou pg_pconnect().
A partir do PHP 8.1.0, usar a conexão padrão tornou-se defasado.
data
Uma linha de texto a ser enviada diretamente para o backend do PostgreSQL. Um terminador NULL
é adicionado automaticamente.
Versão | Descrição |
---|---|
8.1.0 |
O parâmetro connection agora espera uma instância de PgSql\Connection;
anteriormente, um resource era esperado.
|
Exemplo #1 Exemplo de 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.