Forum und email

PostgreSQL

Introdução

O banco de dados PostgreSQL é um produto de código aberto e disponível gratuitamente. O Postgres, desenvolvido originalmente no Departamento de Ciência de Computação da Universidade de Berkeley, foi pioneiro em muitos dos conceitos objeto-relacionais que agora estão disponíveis em alguns bancos de dados comerciais. Fornece suporte a linguagem SQL92/SQL99, integridade de transações e extensibilidade de tipos. O PostgreSQL é um descendente com código aberto do código original desenvolvido em Berkeley.

Dependências

Para usar usar as funções para PostgreSQL, você precisa do PostgreSQL 6.5 ou superior e PostgreSQL 7.0 ou superior para habilitar todos os recursos deste módulo. PostgreSQL suporta inúmeros tipos de codificação de caracteres incluindo a codificação de caracteres multibyte. A versão mais atual e mais informações sobre PostgreSQL estão disponíveis em » https://www.postgresql.org/ e » https://techdocs.postgresql.org/.

Instalação

Para habilitar o módulo de funções para PostgreSQL, a opção de configuração --with-pgsql[=DIR] deve ser usada no momento da compilação do PHP. Se o módulo PostgreSQL estiver disponível como objeto compartilhado, poderá ser carregado usando a diretiva extension no php.ini ou a função dl().

Configurações em execução

O comportamento dessas funções podem ser modificado pelas configurações do php.ini.

Opções de configuração do PostgreSQL
Nome Padrão Alterável Changelog
pgsql.allow_persistent "1" PHP_INI_SYSTEM  
pgsql.max_persistent "-1" PHP_INI_SYSTEM  
pgsql.max_links "-1" PHP_INI_SYSTEM  
pgsql.auto_reset_persistent "0" PHP_INI_SYSTEM Disponível desde o PHP 4.2.0.
pgsql.ignore_notice "0" PHP_INI_ALL Disponível desde o PHP 4.3.0.
pgsql.log_notice "0" PHP_INI_ALL Disponível desde o PHP 4.3.0.
Para mais detalhes e definições das constantes PHP_INI_*, veja Diretivas do arquivo php.ini.

Breve descrição das diretivas de configuração.

pgsql.allow_persistent boolean

Se quer ou não permitir conexões persistentes com o PostgreSQL.

pgsql.max_persistent integer

O número máximo de conexões persistentes com PostgreSQL por processo.

O número máximo de conexões PostgreSQL por processo, incluindo as persistentes.

pgsql.auto_reset_persistent integer

Detecta conexões permantentes quebradas pg_pconnect(). Causa uma pequena sobrecarga.

pgsql.ignore_notice integer

Quando ignorar ou não os avisos do PostgreSQL.

pgsql.log_notice integer

Quando ou não realizar ou não o log de avisos do PostgreSQL. A diretiva pgsql.ignore_notice deve estar em off para poder fazer o log dos avisos.

Como usar e algumas dicas

Aviso

Usar o módulo PostgreSQL com o PHP 4.0.6 não é recomendado devido a um bug no código de manipulação de notificações. Use o 4.1.0 ou superior.

Aviso

Os nomes das funções PostgreSQL serão alterados na versão 4.2.0 para confirmar os padrões de programação atuais. A maioria dos novos nomes terão sublinhados (underscore) adicionais, por exemplo, pg_lo_open(). Algumas funções foram renomeadas para uma maior consistência, por exemplo, pg_exec() mudou para pg_query(). Os nomes antigos podem ser usados na 4.2.0 e em algumas poucas outras versões após esta, mas eles serão removidos futuramente.

Nomes de funções alterados
pg_cmdtuples() pg_affected_rows()
pg_errormessage() pg_last_error()
pg_exec() pg_query()
pg_fieldname() pg_field_name()
pg_fieldsize() pg_field_size()
pg_fieldnum() pg_field_num()
pg_fieldprtlen() pg_field_prtlen()
pg_fieldisnull() pg_field_is_null()
pg_freeresult() pg_free_result()
pg_getlastoid() pg_last_oid()
pg_loreadall() pg_lo_read_all()
pg_locreate() pg_lo_create()
pg_lounlink() pg_lo_unlink()
pg_loopen() pg_lo_unlink()
pg_loclose() pg_lo_close()
pg_loread() pg_lo_read()
pg_lowrite() pg_lo_write()
pg_loimport() pg_lo_import()
pg_loexport() pg_lo_export()
pg_numrows() pg_num_rows()
pg_numfields() pg_num_fields()
pg_result() pg_fetch_result()

A antiga sintaxe pg_connect()/pg_pconnect() ficará obsoleta para suportar conexões assíncronas no futuro. Por favor, use a string de conexão para pg_connect() e pg_pconnect().

Nem todas as funções são suportadas por todas as compilações. Isso vai depender da versão da libpq (A interface cliente em C para PostgreSQL) e como esta foi compilada. Se há alguma função ausente, é porque a libpq não suporta a característica exigida por esta função.

Também é importante que você use uma versão da libpq mais nova do que a que o servidor exige. Se você usar uma versão mais antiga do que a que o servidor espera, você poderá ter problemas.

Desde a versão 6.3 (03/02/1998), o PostgreSQL usa sockets de domínio unix por padrão. A porta TCP não ficará aberta por padrão. Uma tabela é mostrada abaixo descrevendo essas novas possibilidades de conexão. Este socket será encontrado em /tmp/.s.PGSQL.5432. Esta opção pode ser habilitada com o parâmetro '-i' para o postmaster e seu significado é: "escute em sockets TCP/IP assim como em sockets de domínio Unix".

Postmaster e PHP
Postmaster PHP Status
postmaster & pg_connect("dbname=MyDbName"); OK
postmaster -i & pg_connect("dbname=MyDbName"); OK
postmaster & pg_connect("host=localhost dbname=MyDbName"); Unable to connect to PostgreSQL server: connectDB() failed: Is the postmaster running and accepting TCP/IP (with -i) connection at 'localhost' on port '5432'? in /path/to/file.php on line 20.
postmaster -i & pg_connect("host=localhost dbname=MyDbName"); OK

Uma conexão com o servidor PostgreSQL pode ser estabelecida com os seguintes pares de valores definidos na string de comando: $conn = pg_connect("host=seuHost port=suaPorta tty=seuTTY options=suasOpcoes dbname=seuDB user=seuUsuario password=suaSenha");

A sintaxe anterior: $conn = pg_connect ("host", "porta", "opcoes", "tty", "nomebd") ficará obsoleta.

Variáveis de ambiente afetam o comportamento do servidor/cliente PostgreSQL. Por exemplo, o módulo PostgreSQL irá procurar pela variável de ambiente PGHOST quando o nome de host é omitido na string de conexão. As variáveis de ambiente suportadas variam de versão para versão. Vide o Manual de Programador do PostgreSQL (Programmer´s Manual, na seção libpq - Enviroment Variables) para maiores detalhes.

Certifique-se que você definiu as variáveis de ambiente para o usuário apropriado. Use $_ENV ou getenv() para verificar se as variáveis de ambiente estão disponíveis para o processo atual.

Example#1 Definindo os parâmetros padrão

PGHOST=psgql.example.com
PGPORT=7890
PGDATABASE=web-system
PGUSER=web-user
PGPASSWORD=secret
PGDATESTYLE=ISO
PGTZ=JST
PGCLIENTENCODING=EUC-JP

export PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD PGDATESTYLE PGTZ PGCLIENTENCODING

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

PGSQL_ASSOC (integer)
Usada em pg_fetch_array(). Retorna um array associativo contendo nomes dos campos e valores.
PGSQL_NUM (integer)
Usada em pg_fetch_array(). Retorna um array com índice numérico contendo números dos campos e valores.
PGSQL_BOTH (integer)
Usada em pg_fetch_array(). Retorna um array dos valores do campos com índice numérico (por número do campo) e associativo (por nome do campo).
PGSQL_CONNECT_FORCE_NEW (integer)
Passed to pg_connect() to force the creation of a new connection, rather then re-using an existing identical connection.
PGSQL_CONNECTION_BAD (integer)
Retornado pela pg_connection_status() indicando que a conexão com o banco de dados está em um estado inválido.
PGSQL_CONNECTION_OK (integer)
Retornado pela pg_connection_status() indicando que a conexão com o banco de dados está em um estado válido.
PGSQL_SEEK_SET (integer)
Usada na pg_lo_seek(). Encontra a operação que foi iniciada no início do objeto.
PGSQL_SEEK_CUR (integer)
Usada na pg_lo_seek(). Encontra a operação que foi iniciada na posição atual.
PGSQL_SEEK_END (integer)
Usada na pg_lo_seek(). Encontra a operação que foi iniciada no final do objeto.
PGSQL_EMPTY_QUERY (integer)
Retornado pela pg_result_status(). A string enviada para o servidor como vazia.
PGSQL_COMMAND_OK (integer)
Retornado pela pg_result_status(). Sucesso completo de um comando não retornando dados.
PGSQL_TUPLES_OK (integer)
Retornado pela pg_result_status(). Sucesso completo de um comando retornando dados (como um SELECT ou SHOW).
PGSQL_COPY_OUT (integer)
Retornado pela pg_result_status(). Copia (do servidor) dados da transferência iniciada.
PGSQL_COPY_IN (integer)
Retornado pela pg_result_status(). Copia (para o servidor) dados da transferência iniciada.
PGSQL_BAD_RESPONSE (integer)
Retornado pela pg_result_status(). A resposta do servidor que não foi entendida.
PGSQL_NONFATAL_ERROR (integer)
Retornado pela pg_result_status(). Um erro não fatal (um notice ou warning) ocorrido.
PGSQL_FATAL_ERROR (integer)
Retornado pela pg_result_status(). Um erro fatal ocorrido.
PGSQL_TRANSACTION_IDLE (integer)
Retornado pela pg_transaction_status(). Conexão está atualmente sem resposta, não em uma transação.
PGSQL_TRANSACTION_ACTIVE (integer)
Retornado pela pg_transaction_status(). Um comando está em progresso na conexão. Um query foi enviada pela conexão e ainda não foi completada.
PGSQL_TRANSACTION_INTRANS (integer)
Retornado pela pg_transaction_status(). A conexão está sem resposta, em um bloco da transação.
PGSQL_TRANSACTION_INERROR (integer)
Retornado pela pg_transaction_status(). A conexão está sem resposta, em uma falha no bloco da transação.
PGSQL_TRANSACTION_UNKNOWN (integer)
Retornado pela pg_transaction_status(). A conexão está ruim.
PGSQL_DIAG_SEVERITY (integer)
Usada na pg_result_error_field(). O conteúdo dos campos são ERROR, FATAL, ou PANIC (em uma mensagem de erro), ou WARNING, NOTICE, DEBUG, INFO, ou LOG (em uma mensagem do tipo notice), ou uma certa tradução de uma dessas. Sempre presente.
PGSQL_DIAG_SQLSTATE (integer)
Usada na pg_result_error_field(). O código SQLSTATE do erro. O código SQLSTATE identifica o tipo do erro ocorrido; ele pode ser usado por aplicações front-end para executar específicas operações (como um manipulador de erro) em resposta para a um particular erro do banco de dados. Esta campo não é localizado, e está sempre presente.
PGSQL_DIAG_MESSAGE_PRIMARY (integer)
Usada pela pg_result_error_field(). A mensagem de erro primário legível (tipicamente em uma linha). Sempre presente.
PGSQL_DIAG_MESSAGE_DETAIL (integer)
Usada pela pg_result_error_field(). Detalhe: uma mensagem de erro secundário carregando mais detalhes sobre o problema. Pode executar múltiplas linhas.
PGSQL_DIAG_MESSAGE_HINT (integer)
Usada pela pg_result_error_field(). Hint: an optional suggestion what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts. May run to multiple lines.
PGSQL_DIAG_STATEMENT_POSITION (integer)
Usado pela pg_result_error_field(). Uma string contendo um inteiro decimal indicando um erro na posição do cursor como um índice para a string do comando. O primeiro caractere tem o índice 1, e posições são medidas em caracteres, não em bytes.
PGSQL_DIAG_INTERNAL_POSITION (integer)
Usado pela pg_result_error_field(). Esta é definida da mesma forma que o campo PG_DIAG_STATEMENT_POSITION, mas ela é usado quando a posição do cursor refere-se a um comando internamente gerado melhor que o enviado pelo client. O campo PG_DIAG_INTERNAL_QUERY irá sempre aparecer quando este campo aparecer.
PGSQL_DIAG_INTERNAL_QUERY (integer)
Usado na pg_result_error_field(). O texto do comando que falhou gerado internamente. Poderá ser, por exemplo, uma query SQL emitindo por uma função PL/pgSQL.
PGSQL_DIAG_CONTEXT (integer)
Usada na pg_result_error_field(). Um indicador de contexto no qual o erro ocorreu. Atualmente isto inclui a call stack da ativa função da linguagem procedural e queries internamentes geradas. O trace é uma entrada por linha, mais recente primeiro.
PGSQL_DIAG_SOURCE_FILE (integer)
Usada na pg_result_error_field(). O nome do arquivo do código-fonte PostgreSQL localiazdo onde o erro foi reportado.
PGSQL_DIAG_SOURCE_LINE (integer)
Usado na pg_result_error_field(). O número da linha do código-fonte PostgreSQL source-code localizado onde o erro foi reportado.
PGSQL_DIAG_SOURCE_FUNCTION (integer)
Usado na pg_result_error_field(). O nome da função the PostgreSQL source-code que reportou o erro.
PGSQL_ERRORS_TERSE (integer)
Usada na pg_set_error_verbosity(). Especifica qual o tipo da mensagem incluida, texto primário, e posição somente; normalmente em uma única linha.
PGSQL_ERRORS_DEFAULT (integer)
Usada na pg_set_error_verbosity(). O modo padrão de mensagem incluidas acima mais alguns detalhe, sugestão, ou contexto do campo (estes podem ter múltiplas linhas).
PGSQL_ERRORS_VERBOSE (integer)
Usada na pg_set_error_verbosity(). O modo verbose inclui todos os campos disponíveis.
PGSQL_STATUS_LONG (integer)
Usada na pg_result_status(). Indica que código de resultado numério é desejado.
PGSQL_STATUS_STRING (integer)
Usada na pg_result_status(). Indica que resultado texto de comando é desejado.
PGSQL_CONV_IGNORE_DEFAULT (integer)
Usado na pg_convert(). Ignora valores padrão na tabela durante a conversão.
PGSQL_CONV_FORCE_NULL (integer)
Usada na pg_convert(). Usa NULL da SQL no lugar de uma string vazia.
PGSQL_CONV_IGNORE_DEFAULT (integer)
Usada na pg_convert(). Ignora conversão de NULL em colunas SQL NOT NULL.

Exemplos

A partir do PostgreSQL 7.1.0, você pode armazenar até 1GB dentro de um campo do tipo texto. Em versões mais antigas, isto era limitado ao tamanho do bloco (o padrão era 8KB e o máximo era 32KB, definido em tempo de compilação).

Para usar a interface de objetos grandes (large objects), é exigido que se encapsule as funções de objetos grandes em um bloco de transação. Um bloco de transação inicia-se com a declaração SQL BEGIN e, se a transação for válida, termina com COMMIT ou END. Se a transação falhar, ela deve ser fechada com ROLLBACK ou ABORT.

Example#2 Usando Objetos Grandes (large objects)

<?php
    $database 
pg_connect ("dbname=jacarta");
    
pg_query ($database"begin");
    
$oid pg_lo_create ($database);
    echo 
"$oid\n";
    
$handle pg_lo_open ($database$oid"w");
    echo 
"$handle\n";
    
pg_lo_write ($handle"large object data");
    
pg_lo_close ($handle);
    
pg_query ($database"commit");
?>
Você não deve fechar a conexão com o servidor PostgreSQL antes de fechar o objeto grande.

Índice

  • pg_affected_rows — Retorna o número de registros afetados (linhas)
  • pg_cancel_query — Cancela uma consulta (query) assíncrona
  • pg_client_encoding — Retorna a codificação do cliente
  • pg_close — Fecha uma conexão PostgreSQL
  • pg_connect — Abre uma conexão PostgreSQL
  • pg_connection_busy — Verifica se a conexão está ocupada ou não
  • pg_connection_reset — Reinicia uma conexão (reconecta)
  • pg_connection_status — Retorna o status da conexão
  • pg_convert — Converte os valores de um array associativo em uma declaração SQL apropriada.
  • pg_copy_from — Insere registros em uma tabela a partir de um array
  • pg_copy_to — Copia uma tabela em um array
  • pg_dbname — Retorna o nome do banco de dados
  • pg_delete — Remove registros.
  • pg_end_copy — Sincroniza com o backend PostgreSQL
  • pg_escape_bytea — Gera binários para o tipo bytea
  • pg_escape_string — Gera string para o tipo text/char
  • pg_execute — Sends a request to execute a prepared statement with given parameters, and waits for the result.
  • pg_fetch_all_columns — Fetches all rows in a particular result column as an array
  • pg_fetch_all — Retorna todas as linhas (registros) como um array
  • pg_fetch_array — Retorna uma linha (registro) como um array
  • pg_fetch_assoc — Retorna uma linha (registro) como uma matriz associativa
  • pg_fetch_object — Retorna uma linha (registro) como um objeto
  • pg_fetch_result — Retorna valores a partir de um recurso (resource) de resultado
  • pg_fetch_row — Retorna uma linha como um array enumerado
  • pg_field_is_null — Testa se o campo é NULL
  • pg_field_name — Retorna o nome de um campo
  • pg_field_num — Retorna o número do campo referido
  • pg_field_prtlen — Retorna o comprimento impresso
  • pg_field_size — Retorna o tamanho de armazenamento interno de um campo
  • pg_field_table — Returns the name or oid of the tables field
  • pg_field_type_oid — Returns the type ID (OID) for the corresponding field number
  • pg_field_type — Retorna o nome do tipo para o campo de nome correspondente
  • pg_free_result — Libera a memória usada pelo resultado
  • pg_get_notify — Gets SQL NOTIFY message
  • pg_get_pid — Gets the backend's process ID
  • pg_get_result — Retorna o resultado de uma consulta (query) assíncrona
  • pg_host — Retorna o nome da máquina associada a uma conexão
  • pg_insert — Insere um array na tabela
  • pg_last_error — Retorna a string da última mensagem de erro de uma conexão
  • pg_last_notice — Retorna a última notificação do servidor PostgreSQL
  • pg_last_oid — Retorna o último oid do objeto
  • pg_lo_close — Fecha um objeto grande (large object)
  • pg_lo_create — Cria um objeto grande (large object)
  • pg_lo_export — Exporta um objeto grande (large object) para um arquivo
  • pg_lo_import — Importa um objeto grande (large object) a partir de um arquivo
  • pg_lo_open — Abre um objeto grande (large object)
  • pg_lo_read_all — Lê um objeto grande (large object) inteiro e o envia diretamente para o navegador
  • pg_lo_read — Lê um objeto grande (large object)
  • pg_lo_seek — Procura uma posição em um objeto grande (large object)
  • pg_lo_tell — Retorna a posição atual de um objeto grande (large object)
  • pg_lo_unlink — Remove um objeto grande (large object)
  • pg_lo_write — Escreve em um objeto grande (large object)
  • pg_meta_data — Retorna os metadados da tabela.
  • pg_num_fields — Retorna o número de campos
  • pg_num_rows — Retorna o número de linhas
  • pg_options — Retorna as opções associadas com a conexão
  • pg_parameter_status — Looks up a current parameter setting of the server.
  • pg_pconnect — Abre uma conexão PostgreSQL persistente
  • pg_ping — Faz um ping na conexão com o banco de dados
  • pg_port — Retorna o número da porta associada com a conexão.
  • pg_prepare — Submits a request to create a prepared statement with the given parameters, and waits for completion.
  • pg_put_line — Envia uma string terminada em NULL para o backend PostgreSQL
  • pg_query_params — Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text.
  • pg_query — Executa uma consulta (query)
  • pg_result_error_field — Returns an individual field of an error report.
  • pg_result_error — Retorna a mensagem de erro associada a um resultado
  • pg_result_seek — Altera a posição do ponteiro interno de um recurso (resource) de resultado
  • pg_result_status — Retorna o status do resultado da consulta (query)
  • pg_select — Seleciona registros.
  • pg_send_execute — Sends a request to execute a prepared statement with given parameters, without waiting for the result(s).
  • pg_send_prepare — Sends a request to create a prepared statement with the given parameters, without waiting for completion.
  • pg_send_query_params — Submits a command and separate parameters to the server without waiting for the result(s).
  • pg_send_query — Envia uma consulta (query) assincrona
  • pg_set_client_encoding — Define a codificação do cliente
  • pg_set_error_verbosity — Determines the verbosity of messages returned by pg_last_error and pg_result_error.
  • pg_trace — Habilita rastreamento em uma conexão PostgreSQL
  • pg_transaction_status — Returns the current in-transaction status of the server.
  • pg_tty — Retorna o nome da tty associada com a conexão
  • pg_unescape_bytea — Faz escape binário para o tipo bytea
  • pg_untrace — Desabilita o rastreamento de uma conexão PostgreSQL
  • pg_update — Atualiza uma tabela.
  • pg_version — Returns an array with client, protocol and server version (when available)