psql

Nome

psql --  terminal interativo do PostgreSQL

Sinopse

psql [opção...] [nome_do_banco_de_dados [nome_do_usuário]]

Descrição

O psql é um cliente no modo terminal do PostgreSQL. Permite digitar comandos interativamente, submetê-los para o PostgreSQL e ver os resultados. Como alternativa, a entrada pode vir de um arquivo. Além disso, disponibiliza vários meta-comandos e diversas funcionalidades semelhantes às do interpretador de comandos (shell) para facilitar a criação de scripts e automatizar um grande número de tarefas.

Opções

-a
--echo-all
Envia todas as linhas de entrada para a saída padrão à medida que são lidas. É mais útil para o processamento de scripts do que no modo interativo. Equivale a definir a variável ECHO como all.
-A
--no-align
Comuta para o modo de saída não alinhado (De outra forma, o modo de saída padrão é o alinhado).
-c comando
--command comando
Especifica que o psql deve executar a cadeia de caracteres comando e, em seguida, terminar. Útil em scripts do interpretador comandos. O comando deve ser uma cadeia de caracteres que possa ser integralmente analisada pelo servidor (ou seja, não contém funcionalidades específicas do psql), ou ser um único comando de contrabarra. Portanto, não podem ser misturados comandos SQL com meta-comandos do psql. Para misturar, a cadeia de caracteres pode ser enviada para o psql conforme mostrado a seguir: echo "\x \\ select * from foo;" | psql. Se a cadeia de caracteres do comando contiver vários comandos SQL, estes serão processados em uma única transação, a menos que existam comandos BEGIN/COMMIT explícitos incluídos na cadeia de caracteres para dividi-los em várias transações. Este comportamento é diferente do comportamento que ocorre quando a mesma cadeia de caracteres é introduzida na entrada padrão do psql.
-d nome_do_banco_de_dados
--dbname nome_do_banco_de_dados
Especifica o nome do banco de dados a se conectar. Equivale a especificar nome_do_banco_de_dados como o primeiro argumento não-opção na linha de comando.
-e
--echo-queries
Copia todos os comandos SQL enviados para o servidor para a saída padrão também. Equivale a definir a variável ECHO como queries.
-E
--echo-hidden
Exibe os verdadeiros comandos gerados por \d e por outros comandos de contrabarra. Pode ser usado para estudar as operações internas do psql. Equivale a definir a variável ECHO_HIDDEN dentro do psql.
-f nome_do_arquivo
--file nome_do_arquivo
Usa o arquivo nome_do_arquivo como origem dos comandos, em vez de ler os comandos interativamente. Após processar o arquivo, o psql termina. Sob muitos aspectos equivale ao comando interno \i. Se o nome_do_arquivo for - (hífen), então a entrada padrão é lida. O uso desta opção é sutilmente diferente de escrever psql < nome_do_arquivo. De uma maneira geral, as duas formas fazem o esperado, mas o uso da opção -f ativa algumas funcionalidades úteis, como mensagens de erro com o número da linha. Ao se usar esta opção existe, também, uma pequena chance de reduzir a sobrecarga de inicialização. Por outro lado, a utilização do redirecionamento da entrada na linha de comando garante, teoricamente, que será produzida exatamente a mesma saída que seria produzida se tudo fosse entrado à mão.
-F separador
--field-separator separador
Usa o separador como separador de campos. Equivale a \pset fieldsep ou ao comando \f.
-h hospedeiro
--host hospedeiro
Especifica o nome do hospedeiro da máquina onde o servidor está executando. Se o nome iniciar por uma barra (/) é usado como o diretório do soquete do domínio Unix.
-H
--html
Ativa a saída tabular HTML. Equivale a \pset format html ou ao comando \H.
-l
--list
Mostra todos os bancos de dados disponíveis, e depois termina. As outras opções, fora as de conexão, são ignoradas. Semelhante ao comando interno \list.
-o nome_do_arquivo
--output nome_do_arquivo
Coloca a saída de todos os comandos no arquivo nome_do_arquivo. Equivale ao comando \o.
-p porta
--port porta
Especifica a porta TCP, ou a extensão de arquivo do soquete do domínio Unix local, onde o servidor está escutando as conexões. O padrão é obter o valor a partir da variável de ambiente PGPORT, se esta estiver definida, senão usar o valor padrão compilado (normalmente 5432).
-P atribuição
--pset atribuição
Permite especificar opções de exibição no estilo do \pset pela linha de comando. Deve ser observado que aqui o nome e o valor devem estar separados pelo sinal de igual, em vez de espaço. Portanto, para definir o formato de saída como LaTeX deve ser escrito -P format=latex.
-q
--quiet
Especifica que o psql deve trabalhar em silêncio. Por padrão, são exibidas mensagens de boas-vindas e várias outras mensagens informativas. Se esta opção for usada, nada disso acontece. É útil em conjunto com a opção -c. Dentro do psql é possível definir a variável QUIET para obter o mesmo efeito.
-R separador
--record-separator separador
Usa o separador como separador de registros. Equivale ao comando \pset recordsep.
-s
--single-step
Executa no modo passo-único, significando que será solicitada uma confirmação antes de cada comando ser enviado para o servidor, com a opção de cancelar a execução. Usado para depurar scripts.
-S
--single-line
Executa no modo linha-única, onde o caractere de nova-linha termina o comando SQL, como o ponto-e-vírgula faz.
Nota: Este modo é fornecido para aqueles que insistem em usá-lo, mas sua utilização não é incentivada. Em particular, se forem misturados comandos SQL e meta-comandos na mesma linha, a ordem de execução nem sempre será clara para o usuário inexperiente.
-t
--tuples-only
Desabilita a exibição dos nomes das colunas, rodapés com contadores de linhas do resultado, etc. É equivalente ao comando \t.
-T opções_de_tabela
--table-attr opções_de_tabela
Permite especificar opções a serem colocadas dentro da marca table do HTML. Veja \pset para obter detalhes.
-u
Força o psql solicitar o nome do usuário e a senha antes de conectar ao banco de dados. Esta opção está obsoleta, porque é conceitualmente incorreta (Solicitar um nome de usuário não padrão e solicitar uma senha porque o servidor requer são realmente duas coisas diferentes). Incentiva-se o uso das opções -U e -W em seu lugar.
-U nome_do_usuário
--username nome_do_usuário
Conecta ao banco de dados como o usuário nome_do_usuário em vez do usuário padrão (É necessário ter permissão para fazê-lo, é claro).
-v atribuição
--set atribuição
--variable atribuição
Realiza atribuição de variável, como o comando interno \set. Deve ser observado que na linha de comando é necessário separar o nome e o valor, se houver, por um sinal de igual. Para remover a definição de uma variável deve ser omitido o sinal de igual. Para apenas definir uma variável, sem um valor, o sinal de igual é usado mas o valor é omitido. Estas atribuições são feitas durante um estágio bem no princípio da inicialização e, portanto, as variáveis reservadas para finalidades internas podem ser sobrescritas posteriormente.
-V
--version
Mostra a versão do psql, e depois termina.
-W
--password
Força o psql solicitar a senha antes de conectar ao banco de dados. Esta opção continuará definida por toda a sessão, mesmo que a conexão com o banco de dados seja mudada pelo meta-comando \connect. O psql deve solicitar, automaticamente, a senha sempre que o servidor requerer autenticação por senha. Como atualmente a detecção de solicitação de senha não é inteiramente confiável, esta opção existe para obrigar a solicitação. Se a senha não for solicitada, e o servidor requerer autenticação por senha, a tentativa de conexão não será bem-sucedida.
-x
--expanded
Ativa o modo formatação de tabela estendido. Equivale ao comando \x.
-X,
--no-psqlrc
Não lê o arquivo de inicialização ~/.psqlrc.
-?
--help
Mostra a ajuda sobre os argumentos de linha de comando do psql, e depois termina.

Status de saída

O psql retorna para o interpretador de comandos: 0 se terminar normalmente; 1 se ocorrer erro fatal próprio (falta de memória, arquivo não encontrado); 2 se a conexão com o servidor teve problema e a sessão não é interativa; 3 se ocorrer erro no script e a variável ON_ERROR_STOP estiver definida.

Utilização

Conexão com o banco de dados

O psql é uma aplicação cliente do PostgreSQL comum. Para conectar a um banco de dados é necessário saber o nome do banco de dados, o nome do hospedeiro, o número da porta do servidor e o nome do usuário a ser usado para conectar. O psql pode ser informado sobre estes parâmetros por meio das opções de linha de comando -d, -h, -p e -U, respectivamente. Se for encontrado um argumento que não pertence a nenhuma opção, este será interpretado como o nome do banco de dados (ou o nome do usuário, se o nome do banco de dados já tiver sido fornecido). Nem todas estas opções são requeridas; existem padrões úteis. Se for omitido o nome do hospedeiro, então o psql se conecta através do soquete do domínio Unix ao servidor no hospedeiro local. O número padrão para a porta é determinado na compilação. Uma vez que que o servidor de banco de dados usa o mesmo padrão, não é necessário especificar a porta na maioria dos casos. O nome de usuário padrão é o nome do usuário do Unix, como também é o nome do banco de dados padrão. Deve ser observado que não é possível se conectar a qualquer banco de dados com qualquer nome de usuário. O administrador de banco de dados deve informar as permissões de acesso concedidas. Para evitar a digitação, podem ser definidas as variáveis de ambiente PGDATABASE, PGHOST, PGPORT e PGUSER com os valores apropriados.

Se a conexão não puder ser estabelecida por algum motivo (por exemplo, privilégios insuficientes, o servidor não está executando no hospedeiro de destino, etc.), o psql retorna uma mensagem de erro e termina.

Entrando com comandos SQL

No modo normal de operação, o psql exibe um prompt com o nome do banco de dados ao qual está conectado, seguido pela cadeia de caracteres =>. Por exemplo: [1]

$ psql testdb
Bem-vindo ao psql 7.4.1, o terminal interativo do PostgreSQL.

Digite:  \copyright para mostrar a licença da distribuição
         \h para ajuda nos comandos SQL
         \? para ajuda nos comandos de contrabarra internos
         \g ou finalizar com ponto-e-vírgula para executar o comando
         \q para sair

testdb=>

No prompt o usuário pode digitar comandos SQL. Normalmente, as linhas de entrada são enviadas para o servidor quando é encontrado o caractere ponto-e-vírgula, que termina o comando. Um fim de linha não termina o comando. Portanto, os comandos podem ser distribuídos por várias linhas para maior clareza. Se o comando for enviado e executado sem erro, o resultado do comando será mostrado na tela.

Sempre que um comando é executado, o psql também verifica eventos de notificação assíncronos gerados pelo LISTEN e NOTIFY .

Meta-comandos

Qualquer texto digitado no psql começando por uma contrabarra (\) (não entre apóstrofos, ') é um meta-comando do psql processado pelo próprio psql. Estes comandos ajudam a tornar o psql mais útil para administração e para scripts. Os meta-comandos são geralmente chamados de comandos de barra ou de contrabarra.

O formato de um comando psql é a contrabarra, seguida imediatamente por um verbo comando, e depois pelos argumentos. Os argumentos são separados do verbo comando, e entre si, por qualquer número de caracteres de espaço em branco.

Para incluir espaço em branco no argumento deve-se colocá-los entre apóstrofos ('). Para incluir um apóstrofo neste tipo de argumento, deve-se precedê-lo por uma contrabarra. Qualquer texto entre apóstrofos está sujeito às substituições no estilo C para \n (nova-linha), \t (tabulação), \dígitos, \0dígitos e \0xdígitos (o caractere com o código decimal, octal ou hexadecimal especificado).

Se um argumento (não entre apóstrofos) começar por dois-pontos (:), será considerado como sendo uma variável do psql, e o valor desta variável será usado como o argumento.

Os argumentos entre crases (`) são considerados como sendo linhas de comando a serem passadas para o interpretador de comandos. A saída do comando (com o caractere de nova-linha final removido) é usada como o valor do argumento. As seqüências de escape (\) acima também se aplicam às crases.

Alguns comandos recebem como argumento um identificador SQL como, por exemplo, o nome de uma tabela. Estes argumentos seguem as regras de sintaxe do SQL: as letras que não se encontram entre aspas (") são transformadas em minúsculas, enquanto as letras que se encontram entre aspas ficam protegidas contra a transformação em minúsculas. As aspas permitem, também, incorporar espaços em branco ao identificador. Quando entre as aspas, um par de aspas é reduzido a uma única aspas no nome resultante. Por exemplo, FOO"BAR"BAZ é interpretado como fooBARbaz, e "Um nome"" estranho" se torna Um nome" estranho.

A análise dos argumentos pára quando é encontrada outra contrabarra (não entre apóstrofos). Esta é considerada como sendo o início de um novo meta-comando. A seqüência especial \\ (duas contrabarras) marca o fim dos argumentos e a continuação da análise dos comandos SQL, se existirem. Desta forma, os comandos SQL e psql podem ser livremente misturados na linha. Mas em nenhum caso os argumentos de um meta-comando podem continuar após o fim da linha.

Os seguintes meta-comandos estão definidos:

\a
Se o formato corrente de saída de tabela for desalinhado, troca para alinhado. Se não for desalinhado, define como desalinhado. Este comando é mantido para compatibilidade com as versões anteriores. Veja em \pset uma solução mais geral.
\cd [diretório]
Muda o diretório de trabalho corrente para diretório. Sem argumento, muda para o diretório home do usuário corrente.
Dica: Para ver o diretório de trabalho corrente deve ser usado \!pwd.
\C [ título ]
Define o título de todas as tabelas mostradas como resultado de uma consulta, ou remove a definição deste título. Este comando equivale a \pset title título (O nome deste comando deriva de "caption" (título), porque anteriormente só era usado para definir título em uma tabela HTML).
\connect (ou \c) [ nome_do_banco_de_dados [ nome_do_usuário ] ]
Estabelece a conexão com um banco de dados novo e/ou com um usuário novo. A conexão anterior é fechada. Se o nome_do_banco_de_dados for - (hífen), então é assumido o banco de dados corrente. Se o nome_do_usuário for omitido, então o nome do usuário corrente é utilizado. Como regra especial, o \connect sem nenhum argumento conecta ao banco de dados padrão com o usuário padrão (da mesma forma que aconteceria se o psql fosse iniciado sem argumentos). Se a tentativa de conexão não for bem-sucedida (nome de usuário errado, acesso negado, etc.), a conexão anterior será mantida se, e somente se, o psql estiver no modo interativo. Quando estiver executando um script não interativo, o processamento será interrompido imediatamente com erro. Esta distinção foi escolhida por ser mais conveniente para o usuário, que digita menos, e como um mecanismo de segurança, impedindo os scripts de atuarem acidentalmente no banco de dados errado.
\copy tabela [ ( lista_de_colunas ) ] { from | to } nome_do_arquivo | stdin | stdout [ with ] [ oids ] [ delimiter [as] 'caractere' ] [ null [as] 'cadeia_de_caracteres' ]
Executa uma cópia pelo cliente. Esta é uma operação que executa o comando COPY do SQL, mas em vez do servidor ler ou escrever no arquivo especificado, o psql lê ou escreve no arquivo e roteia os dados entre o servidor e o sistema de arquivos local. Isto significa que a acessibilidade ao arquivo e os privilégios são do usuário local, e não do servidor, e que não há necessidade dos privilégios do superusuário. A sintaxe deste comando é semelhante à sintaxe do comando COPY do SQL (Veja sua descrição para obter detalhes). Deve ser observado que, por isso, são aplicadas regras especiais de análise ao comando \copy. Em particular, não se aplicam as regras de substituição de variável e de escape de contrabarra (\).
Dica: Este operação não é tão eficiente quanto o comando COPY do SQL, porque todos os dados passam através da conexão cliente/servidor. Para uma grande quantidade de dados, o comando SQL pode ser preferível.
Nota: Deve ser observada a diferença de interpretação da stdin da stdout entre as cópias pelo cliente e pelo servidor: na cópia pelo cliente se referem sempre à entrada e saída do psql. Na cópia pelo servidor, stdin vem do lugar onde o próprio comando COPY veio (por exemplo, um script executado com a opção -f), e a stdout se refere à saída do comando (veja o meta-comando \o abaixo).
\copyright
Mostra os termos da distribuição e dos direitos autorais do PostgreSQL.
\d [ padrão ]
Para cada relação (tabela, visão, índice ou seqüência) correspondendo ao padrão, mostra todas as colunas, seus tipos e os atributos especiais como NOT NULL ou o valor padrão, se houver. Os índices, restrições, regras e gatilhos associados também são mostrados, assim como a definição da visão se a relação for uma visão (A "Correspondência com padrão" é definida abaixo). A forma \d+ do comando é idêntica, mas todos os comentários associados às colunas da tabela também são mostrados.
Nota: Se \d for utilizado sem o argumento padrão, torna-se equivalente a \dtvs, mostrando a lista de todas as tabelas, visões e seqüências. Isto é puramente uma medida de conveniência.
\da [ padrão ]
Lista todas as funções de agregação disponíveis, junto com o tipo de dado com que operam. Se for especificado o padrão, somente são mostradas as agregações cujos nomes correspondem ao padrão.
\dc [ padrão ]
Lista todas as conversões entre codificações de conjunto de caracteres disponíveis. Se for especificado o padrão, somente são mostradas as conversões cujos nomes correspondem ao padrão.
\dC
Mostra todas as conversões de tipo (cast) disponíveis.
\dd [ padrão ]
Mostra a descrição dos objetos cujos nomes correspondem ao padrão, ou todos os objetos visíveis se nenhum argumento for especificado. Nos dois casos somente são listados os objetos que possuem uma descrição ("Objeto" compreende agregações, funções, operadores, tipos, relações [tabelas, visões, índices, seqüências e objetos grandes], regras e gatilhos). Por exemplo:
=> \dd version
                     Object descriptions
   Schema   |  Name   |  Object  |        Description
------------+---------+----------+---------------------------
 pg_catalog | version | function | PostgreSQL version string
(1 linha)
As descrições dos objetos podem ser criadas pelo comando COMMENT do SQL.
\dD [ padrão ]
Lista todos os domínios disponíveis. Se for especificado o padrão, somente são mostrados os domínios cujos nomes correspondem ao padrão.
\df [ padrão ]
Lista as funções disponíveis, junto com o tipo de dado de seus argumentos e do valor retornado. Se for especificado o padrão, somente são mostradas as funções cujos nomes correspondem ao padrão. Se for usada a forma \df+, são mostradas informações adicionais sobre cada função, incluindo a linguagem e a descrição.
Nota: Para reduzir a desordem, o \df não mostra as funções com tipo de dado I/O. Isto é implementado ignorando as funções que recebem ou retornam o tipo cstring.
\distvS [ padrão ]
Este não é, na verdade, o nome do comando: As letras i, s, t, v, S correspondem a índice, seqüência, tabela, visão e tabela do sistema, respectivamente. Pode ser especificada qualquer uma ou todas as letras, em qualquer ordem, para obter a listagem de todos os objetos correspondentes. A letra S restringe a listagem aos objetos do sistema; sem o S, somente são mostrados os objetos que não são do sistema. Se for anexado ao nome do comando o caractere +, cada objeto é listado junto com sua descrição associada, se houver. Se for especificado o padrão, somente são mostrados os objetos cujos nomes correspondem ao padrão.
\dl
Este é um outro nome para \lo_list, que mostra a lista dos objetos grandes.
\dn [ padrão ]
Lista todos os esquemas (espaços de nomes) disponíveis. Se for especificado o padrão (uma expressão regular), somente são mostrados os esquemas cujos nomes correspondem ao padrão.
\do [ padrão ]
Lista os operadores disponíveis junto com o tipo de seus operandos e do valor retornado. Se for especificado o padrão, somente são mostrados os operadores cujos nomes correspondem ao padrão.
\dp [ padrão ]
Produz uma lista contendo todas as tabelas, visões e seqüências disponíveis, junto com seus privilégios de acesso associados. Se for especificado o padrão, somente são mostradas as tabelas, visões e seqüências cujos nomes correspondem ao padrão. Os comandos GRANT e REVOKE são utilizados para definir os privilégios de acesso. Veja o comando GRANT para obter mais informações.
\dT [ padrão ]
Mostra todos os tipos de dado, ou somente aqueles que correspondem ao padrão. A forma do comando \dT+ mostra informações adicionais.
\du [ padrão ]
Lista todos os usuários do banco de dados, ou somente aqueles que correspondem ao padrão.
\edit (ou \e) [ nome_do_arquivo ]
Se for especificado o nome_do_arquivo, o arquivo é editado; após o fim da edição (fechar o editor), o conteúdo do arquivo é copiado para o buffer de comando. Se não for fornecido nenhum argumento, o buffer de comando corrente é copiado para um arquivo temporário, que é editado de forma idêntica. O novo buffer de comando é então analisado novamente, de acordo com as regras normais do psql, onde todo o buffer é tratado como sendo uma única linha (Portanto, não podem ser gerados scripts dessa forma. Use o comando \i para isso). Significa também que, se o comando terminar por (ou contiver) um ponto-e-vírgula, será executado imediatamente. Se não contiver, apenas permanecerá aguardando no buffer de comando.
Dica: O psql procura nas variáveis de ambiente PSQL_EDITOR, EDITOR e VISUAL (nesta ordem) o editor a ser usado. Se nenhuma delas estiver definida, então é usado /bin/vi.
\echo texto [ ... ]
Envia os argumentos para a saída padrão, separados por um espaço e seguido por um caractere de nova-linha, o que pode ser útil para intercalar informações na saída dos scripts. Por exemplo:
=> \echo `date`
Dom Fev 20 05:10:59 BRT 2005
Se o primeiro argumento for -n (não entre apóstrofos) não é enviado o caractere de nova-linha final.
Dica: Se for usado o comando \o para redirecionar a saída do comando, talvez seja preferível utilizar \qecho em vez deste comando.
\encoding [ codificação ]
Define a codificação do conjunto de caracteres do cliente. Sem argumento, este comando mostra a codificação corrente. Por exemplo:
=> \encoding
LATIN1
\f [ cadeia_de_caracteres ]
Define o separador de campos para a saída de comando desalinhada. O padrão é a barra vertical (|). Veja também em \pset uma forma genérica para definir as opções de saída.
\g [ { nome_do_arquivo | |comando } ]
Envia o buffer de entrada de comando corrente para o servidor e, opcionalmente, armazena a saída do comando em nome_do_arquivo, ou envia a saída para outro interpretador de comandos do Unix executar o comando. Um \g puro e simples é virtualmente equivalente ao ponto-e-vírgula. Um \g com argumento é uma alternativa "de uma única vez" para o comando \o. O exemplo abaixo coloca a saída do comando SELECT na área de edição do editor gvim: [2]
=> SELECT datname FROM pg_database \g | gvim -
=> Vim: Reading from stdin...
\help (ou \h) [ comando ]
Fornece ajuda de sintaxe para o comando SQL especificado. Senão for especificado o comando, então o psql lista todos os comandos para os quais existe ajuda de sintaxe disponível. Se o comando for um asterisco ("*"), então é mostrada a ajuda de sintaxe para todos os comandos SQL.
Nota: Para simplificar a digitação, os comandos compostos por várias palavras não necessitam estar entre apóstrofos. Portanto, pode ser digitado \help alter table.
\H
Habilita o formato de saída de comando HTML. Se o formato HTML já estiver habilitado, retorna ao formato de texto alinhado padrão. Este comando existe por compatibilidade e comodidade, mas deve ser visto em \pset as definições de outras opções de saída.
\i nome_do_arquivo
Lê a entrada no arquivo nome_do_arquivo, e executa como se tivesse sido digitada pelo teclado.
Nota: Se for desejado ver as linhas na tela à medida que são lidas, deve ser definida a variável ECHO como all.
\l (ou \list)
Lista o nome, dono e codificação do conjunto de caracteres de todos os bancos de dados do servidor. Se for adicionado o caractere + ao nome do comando, também são mostradas todas as descrições dos bancos de dados.
\lo_export loid nome_do_arquivo
Lê no banco de dados o objeto grande com OID igual a loid, e escreve em nome_do_arquivo. Deve ser observado que isto é sutilmente diferente da função do servidor lo_export, que atua com a permissão do usuário como o qual o servidor de banco de dados está executando, e no sistema de arquivos do servidor.
Dica: Use \lo_list para descobrir os OIDs dos objetos grandes.
\lo_import nome_do_arquivo [ comentário ]
Armazena o arquivo em um objeto grande do PostgreSQL. Opcionalmente, associa o comentário fornecido ao objeto. Exemplo:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'uma fotografia minha'
lo_import 152801
A resposta indica que o objeto grande recebeu o identificador de objeto 152801, que deve ser lembrado para acessar o objeto novamente. Por esta razão, recomenda-se associar sempre um comentário inteligível a cada objeto. Estes podem ser vistos utilizando o comando \lo_list. Deve ser observado que este comando é sutilmente diferente da função lo_import do servidor, porque atua como o usuário local no sistema de arquivos local, em vez do usuário do servidor no sistema de arquivos do servidor.
\lo_list
Mostra a lista de todos os objetos grandes do PostgreSQL armazenados neste instante no banco de dados, junto com os comentários fornecidos para os mesmos.
\lo_unlink loid
Remove do banco de dados o objeto grande com o OID igual a loid.
Dica: Use \lo_list para descobrir os OIDs dos objetos grandes.
\o [ {nome_do_arquivo | |comando} ]
Salva os resultados dos próximos comandos no arquivo nome_do_arquivo, ou envia os próximos resultados para um outro interpretador de comandos do Unix para executar o comando. Se não for especificado nenhum argumento, a saída do comando será redefinida para a saída padrão. O exemplo abaixo coloca a saída dos comandos SELECT e \qecho na área de edição do editor gvim: [3]
=> \o | gvim -
=> Vim: Reading from stdin...
=> \qecho Bancos de Dados
=> SELECT datname FROM pg_database;
=> \qecho Linguagens
=> SELECT lanname FROM pg_language;
=> \o
Os "resultados dos comandos" incluem todas as tabelas, respostas dos comandos e notificações recebidas do servidor de banco de dados, assim como a saída de vários comandos de contrabarra que consultam o banco de dados (como o \d), mas não as mensagens de erro.
Dica: Para intercalar saída de texto entre os resultados dos comandos deve ser utilizado \qecho.
\p
Envia o buffer de comando corrente para a saída padrão.
\pset parâmetro [ value ]
Este comando define opções que afetam a saída das tabelas de resultado dos comandos. O parâmetro indica qual opção será definida. A semântica do valor depende do parâmetro. As opções de exibição ajustáveis são:
format
Define o formato de saída como unaligned (desalinhado), aligned (alinhado), html ou latex. São permitidas abreviações únicas (O que significa que basta uma letra). O modo "unaligned" escreve todas as colunas de uma linha em uma única linha, separadas pelo separador de campos ativo corrente. Pretende-se com isso criar uma saída que sirva de entrada para outros programas (separada por tabulação, vírgula, etc.). O modo "aligned" é a saída de texto padrão, inteligível e agradavelmente formatada. Os modos "HTML" e "LaTeX" produzem tabelas feitas para serem incluídas em documentos usando a linguagem de marcação correspondente. Não são documentos completos! (Isto não é tão problemático no HTML, mas no LaTeX deve haver um invólucro completo do documento).
border
O segundo argumento deve ser um número. Em geral, quanto maior o número mais bordas e linhas a tabela terá, mas isto depende do formato. No modo HTML será traduzido diretamente para o atributo border=..., nos demais modos só fazem sentido os valores: 0 (sem borda); 1 (linhas divisórias internas); e 2 (moldura da tabela).
expanded (ou x)
Alterna entre os formatos regular e expandido. Quando o formato expandido está habilitado, todas as saídas possuem duas colunas, com o nome da coluna à esquerda e o dado à direita. Este modo é útil quando os dados não cabem na tela no modo normal "horizontal". O modo expandido é suportado por todos os quatro formatos de saída.
null
O segundo argumento é a cadeia de caracteres a ser mostrada sempre que a coluna for nula. O padrão é não mostrar nada, que pode ser facilmente confundido com, por exemplo, uma cadeia de caracteres vazia. Portanto, pode-se preferir escrever \pset null '(nulo)'.
fieldsep
Especifica o separador de campos a ser utilizado no modo de saída desalinhado. Desta forma pode ser criada, por exemplo, uma saída separada por tabulação ou por vírgula, que os outros programas podem preferir. Para definir o caractere de tabulação como separador de campos deve ser usado \pset fieldsep '\t'. O separador de campos padrão é '|' (a barra vertical).
footer
Alterna a exibição do rodapé padrão (x linhas).
recordsep
Especifica o separador de registro (linha) a ser usado no modo de saída desalinhado. O padrão é o caractere de nova-linha.
tuples_only (ou t)
Alterna entre mostrar somente as tuplas e mostrar tudo. O modo mostrar tudo pode mostrar informações adicionais como os cabeçalhos das colunas, títulos e vários rodapés. No modo somente-tuplas são mostrados apenas os dados da tabela.
title [ texto ]
Define o título das próximas tabelas mostradas. Pode ser usado para colocar textos descritivos na saída. Se não for fornecido nenhum argumento, o título é removido.
tableattr (ou T) [ texto ]
Permite especificar qualquer atributo a ser colocado dentro da marca table do HTML. Estes atributos podem ser, por exemplo, cellpadding ou bgcolor. Deve ser observado que, provavelmente, não será desejado especificar border aqui, porque isto já é tratado pelo \pset border.
pager
Controla o uso do paginador para comandos e para a saída da ajuda do psql. Se a variável de ambiente PAGER estiver definida, a saída será enviada para o programa especificado, senão é utilizado o padrão dependente da plataforma (como o more). Quando o paginador está desabilitado, a paginação não é feita. Quando o paginador está habilitado, a paginação é feita somente quando for apropriado, ou seja, quando a saída é para um terminal e não cabe na tela (O psql não realiza um trabalho perfeito ao avaliar quando o paginador deve ser utilizado). \pset pager habilita e desabilita o paginador. O paginador também pode ser definido como always, o que faz o paginador ser utilizado sempre.

Ilustrações mostrando como se parecem estes formatos diferentes podem ser vistas na seção Exemplos .

Dica: Existem vários comandos abreviados para o \pset. Veja \a, \C, \H, \t, \T e \x.

Nota: É errado chamar o \pset sem argumentos. No futuro, esta chamada deverá mostrar o status corrente de todas as opções de exibição.

\q
Sair do programa psql.
\qecho texto [ ... ]
Este comando é idêntico a \echo, exceto que toda a saída é escrita no canal de saída de comando, conforme definido por \o.
\r
Redefine (limpa) o buffer de comando.
\s [ nome_do_arquivo ]
Mostra ou salva o histórico da linha de comando em nome_do_arquivo. Se for omitido o nome_do_arquivo, o histórico é escrito na saída padrão. Esta opção somente estará disponível se o psql estiver configurado para usar a biblioteca Readline do GNU.
Nota: Na versão corrente não é mais necessário salvar o histórico de comandos, porque isso é feito automaticamente ao término do programa. O histórico também é carregado, automaticamente, toda vez que o psql inicia.
\set [ nome [ value [ ... ]]]
Define a variável interna nome com o valor ou, se for fornecido mais de um valor, com a concatenação de todos os valores. Se não for fornecido o segundo argumento a variável somente é definida, sem nenhum valor. Para remover a definição da variável deve ser usado o comando \unset. Nomes de variáveis válidos podem conter letras, dígitos e sublinhados (_). Veja a seção Variáveis abaixo para obter detalhes. Embora possa ser definida qualquer variável como qualquer coisa desejada, o psql trata várias variáveis como sendo especiais. Elas estão documentadas na seção sobre variáveis.
Nota: Este comando é totalmente distinto do comando SET do SQL.
\t
Alterna a exibição do cabeçalho contendo o nome das colunas e do rodapé contendo o número de linhas. Este comando equivale a \pset tuples_only, sendo fornecido por conveniência.
\T opções_de_tabela
Permite especificar atributos a serem colocados na marca table no modo de saída tabular HTML. Este comando equivale a \pset tableattr opções_de_tabela.
\timing
Alterna a exibição de quanto tempo cada comando SQL demora, em milissegundos.
\w {nome_do_arquivo | |command}
Escreve o buffer de comando corrente no arquivo nome_do_arquivo, ou envia para o comando Unix comando através de um pipe. O exemplo abaixo utiliza o comando \w para executar dois comandos do sistema operacional: [4]
=> \w | date
Dom Fev 20 07:55:08 BRT 2005
=> \w | pwd
/root
\x
Alterna o modo de formatação de tabela estendido. Como tal equivale a \pset expanded.
\z [ padrão ]
Produz uma lista contendo todas as tabelas, visões e seqüências disponíveis, junto com seus privilégios de acesso associados. Se for especificado o padrão, somente são mostradas as tabelas, visões e seqüências cujos nomes correspondem ao padrão. Os comandos GRANT e REVOKE são utilizados para definir os privilégios de acesso. Veja o comando GRANT para obter mais informações. Este comando é um outro nome para o comando \dp ("display privileges").
\! [ comando ]
Abre um outro interpretador de comandos do Unix, ou executa o comando Unix comando. Os argumentos não são mais interpretados, sendo enviados para o interpretador de comandos como estão. O exemplo abaixo utiliza o meta-comando \! para executar dois comandos do sistema operacional Unix: [5]
=> \!date
Dom Fev 20 08:04:41 BRT 2005
=> \!pwd
/root
\?
Mostra informação de ajuda para os comandos de contrabarra ("\").

Vários comandos \d aceitam como parâmetro um padrão para especificar os nomes dos objetos a serem mostrados. O * significa "qualquer seqüência de caracteres" e ? significa "qualquer um único caractere" (Esta notação é semelhante a do padrão para nomes de arquivos do interpretador de comandos do Unix). Os usuários avançados também podem utilizar a notação das expressões regulares, como as classes de caracteres; por exemplo [0-9] correspondendo a "qualquer dígito". Para fazer qualquer um desses caracteres de correspondência com padrão ser interpretado literalmente, deve-se colocá-lo entre aspas.

Um padrão contendo um ponto (não entre aspas) é interpretado como um padrão de nome de esquema seguido por um padrão de nome de objeto. Por exemplo, \dt foo*.bar* mostra todas as tabelas nos esquemas cujos nomes começam por foo, e cujos nomes de tabela começam por bar. Se não houver nenhum ponto, então o padrão corresponde apenas aos objetos visíveis no caminho de procura de esquemas corrente. Por exemplo: (N. do T.)

=> \dt info*.*sizing*

                      Lista de relações
      Esquema       |        Nome         |  Tipo  |   Dono
--------------------+---------------------+--------+----------
 information_schema | sql_sizing          | tabela | postgres
 information_schema | sql_sizing_profiles | tabela | postgres
(2 linhas)

=> \dt 'info*.*sizing*'

                      Lista de relações
      Esquema       |        Nome         |  Tipo  |   Dono
--------------------+---------------------+--------+----------
 information_schema | sql_sizing          | tabela | postgres
 information_schema | sql_sizing_profiles | tabela | postgres
(2 linhas)

=> \dt "info*.*sizing*"

Não foi encontrada relação correspondente.

Sempre que o parâmetro padrão é omitido, o comando \d mostra todos os objetos visíveis no caminho de procura de esquemas corrente. Para mostrar todos os objetos do banco de dados, deve ser usado o padrão *.*.

Funcionalidades avançadas

Variáveis

O psql fornece uma funcionalidade de substituição de variáveis semelhante a dos interpretadores de comando do Unix. As variáveis são simplesmente pares nome/valor, onde o valor pode ser qualquer cadeia de caracteres de qualquer comprimento. Para definir as variáveis é utilizado o meta-comando do psql \set:

testdb=> \set foo bar

define a variável foo com o valor bar. Para acessar o conteúdo da variável deve-se preceder seu nome por dois-pontos (:), e usá-lo como argumento de qualquer comando de contrabarra:

testdb=> \echo :foo
bar

Nota: Os argumentos do \set estão sujeitos às mesmas regras de substituição de qualquer outro comando. Portanto, podem ser construídas referências interessantes como \set :foo 'something' e obter "soft links" ou "variable variables" do Perl e do PHP, respectivamente. Desafortunadamente (ou afortunadamente?), não existe nenhuma forma de fazer algo útil com estas construções. Por outro lado, \set bar :foo é uma forma perfeitamente válida de copiar uma variável.

Se \set for chamado sem o segundo argumento, a variável é definida com uma cadeia de caracteres vazia como valor. Para remover a definição (ou excluir) a variável, deve ser utilizado o comando \unset.

Os nomes das variáveis internas do psql podem ser formados por letras, números e sublinhados em qualquer ordem e número. Algumas destas variáveis recebem tratamento especial pelo psql. Denotam determinadas configurações de opção que podem ser mudadas em tempo de execução alterando o valor da variável, ou representam algum estado da aplicação. Embora seja possível usar estas variáveis para qualquer outra finalidade isto não é recomendado, porque o comportamento do programa pode ficar muito estranho, muito rapidamente. Por convenção, todas as variáveis com tratamento especial possuem todas as letras maiúsculas (e possivelmente números e sublinhados). Para garantir a máxima compatibilidade futura, evite usar estes nomes de variáveis para as suas próprias finalidades. Abaixo segue a lista de todas as variáveis com tratamento especial.

AUTOCOMMIT
Quando está on (o padrão), cada comando SQL é automaticamente efetivado ao terminar bem-sucedido. Neste modo, para adiar a efetivação deve ser entrado um comando SQL BEGIN ou START TRANSACTION. Quando está off, ou não definido, os comandos SQL não são efetivados até ser emitido explicitamente o comando COMMIT ou END. O modo "autocommit-off" opera emitindo um comando BEGIN, implícito, logo antes de qualquer comando que não esteja dentro de um bloco de transação, e não seja o próprio BEGIN ou outro comando de controle de transação, nem um comando que não possa ser executado dentro de uma transação, (como o VACUUM).
Nota: No modo "autocommit-off" toda transação que não for bem-sucedida deve ser explicitamente abandonada entrando com ABORT ou ROLLBACK. Também tenha em mente que, se a sessão for terminada sem a transação ser efetivada, o trabalho será perdido.
Nota: O modo "autocommit-on" é o comportamento tradicional do PostgreSQL, mas o modo "autocommit-off" é mais próximo da especificação SQL. Se for preferido o modo "autocommit-off", este pode ser definido no arquivo ~/.psqlrc do usuário.
O exemplo abaixo mostra o valor da variável AUTOCOMMIT: [6]
=> \echo :AUTOCOMMIT
on
DBNAME
O nome do banco de dados que se está conectado no momento. Definida toda vez que é feita a conexão com um banco de dados (inclusive na inicialização do programa), mas a definição pode ser removida. O exemplo abaixo mostra o valor da variável DBNAME: [7]
=> \echo :DBNAME
template1
ECHO
Se for definida como "all", todas as linhas entradas pelo teclado, ou do script, são escritas na saída padrão antes de serem analisadas ou executadas. Para selecionar este comportamento na inicialização do programa, deve ser usada a chave -a. Se for definida como "queries", o psql simplesmente mostra todos os comandos à medida que são enviados para o servidor. A chave para isto é -e.
ECHO_HIDDEN
Quando esta variável está definida, e um comando de contrabarra consulta o banco de dados, primeiro a consulta é mostrada. Por este meio pode-se estudar a parte interna do PostgreSQL e oferecer funcionalidades semelhantes nos próprios programas (Para selecionar este comportamento na inicialização do programa, deve ser usada a chave -E). Se a variável for definida com o valor "noexec" os comandos são apenas mostrados, não são enviados para o servidor para serem executados. O exemplo abaixo define a variável ECHO_HIDDEN e executa o meta-comando \dn: [8]
=> \set ECHO_HIDDEN
=> \dn
********* QUERY **********
SELECT n.nspname AS "Nome",
       u.usename AS "Dono"
FROM pg_catalog.pg_namespace n LEFT JOIN pg_catalog.pg_user u
       ON n.nspowner=u.usesysid
ORDER BY 1;
**************************

       Lista dos esquemas
        Nome        |   Dono
--------------------+----------
 information_schema | postgres
 pg_catalog         | postgres
 pg_temp_1          | postgres
 pg_toast           | postgres
 public             | postgres
(5 linhas)
ENCODING
A codificação corrente do conjunto de caracteres do cliente. O exemplo abaixo mostra o valor da variável ENCODING: [9]
=> \echo :ENCODING
LATIN1
HISTCONTROL
Se esta variável estiver definida como "ignorespace", as linhas começando por espaço não são guardadas na lista de histórico. Se estiver definida como "ignoredups", as linhas idênticas à linha anterior do histórico não são guardadas. O valor "ignoreboth" combina estas duas opções. Se não estiver definida, ou se estiver definida com um valor diferente destes acima, todas as linhas lidas no modo interativo são guardadas na lista de histórico.
Nota: Esta funcionalidade foi desavergonhadamente plagiada do Bash.
HISTSIZE
O número de comandos a serem guardados no histórico de comandos. O valor padrão é 500.
Nota: Esta funcionalidade foi desavergonhadamente plagiada do Bash.
HOST
O hospedeiro do servidor de banco de dados ao qual se está conectado. Definida toda vez que se conecta com o banco de dados (inclusive na inicialização do programa), mas a definição pode ser removida.
IGNOREEOF
Se não estiver definida, o envio do caractere EOF (geralmente Control+D) para uma sessão interativa do psql termina a aplicação. Se estiver definida com um valor numérico, é ignorada esta quantidade de caracteres EOF antes da aplicação terminar. Se a variável estiver definida, mas não tiver um valor numérico, o padrão é 10.
Nota: Esta funcionalidade foi desavergonhadamente plagiada do Bash.
LASTOID
O valor do último OID afetado, conforme retornado por um comando INSERT ou lo_insert. Somente há garantia desta variável ser válida até ser mostrado o resultado do próximo comando SQL.
ON_ERROR_STOP
Por padrão, se um script não-interativo encontrar algum erro, como um comando SQL ou um meta-comando interno mal formado, o processamento continua. Este tem sido o comportamento tradicional do psql, mas algumas vezes não é o desejado. Se esta variável estiver definida, o processamento do script terminará imediatamente. Se o script foi chamado por outro script este terminará da mesma maneira. Se o script mais externo não foi chamado por uma sessão interativa do psql, mas usando a opção -f, o psql retorna o código de erro 3, para distinguir este caso das condições de erro fatal (código de erro 1).
PORT
A porta do servidor de banco de dados que se está conectado. Definida toda vez que se conecta com o banco de dados (inclusive na inicialização do programa), mas a definição pode ser removida.
PROMPT1
PROMPT2
PROMPT3
Especificam como os prompts emitidos pelo psql devem se parecer. Veja Prompt abaixo.
QUIET
Esta variável equivale à opção de linha de comando -q. Provavelmente não tem muita utilidade no modo interativo.
SINGLELINE
Esta variável equivale à opção de linha de comando -S.
SINGLESTEP
Esta variável equivale à opção de linha de comando -s.
USER
O usuário do banco de dados como o qual se está conectado. Definida toda vez que é feita a conexão com o banco de dados (inclusive na inicialização do programa), mas a definição pode ser removida.
VERBOSITY
Esta variável pode ser definida com os valores default, verbose ou terse (sucinto), para controlar a verbosidade dos relatórios de erro.

Interpolação SQL

Uma funcionalidade adicional útil das variáveis do psql é poderem ser substituídas ("interpoladas") dentro de comandos SQL regulares. Novamente a sintaxe é colocar dois-pontos (:) como prefixo do nome da variável.

testdb=> \set foo 'minha_tabela'
testdb=> SELECT * FROM :foo;

faria então a consulta à tabela minha_tabela. O valor da variável é copiado literalmente podendo, portanto, conter apóstrofos não balanceados ou comandos de contrabarra. Deve-se ter certeza que faz sentido onde é colocada. A interpolação de variáveis não é realizada dentro de entidades SQL entre aspas ou apóstrofos. Por exemplo: (N. do T.)

testdb=> \set tabela 'pg_catalog.pg_user'
testdb=> \echo :tabela
pg_catalog.pg_user
testdb=> \echo ':tabela'
:tabela
testdb=> \echo ":tabela"
":tabela"
testdb=> SELECT usename FROM :tabela WHERE usesysid=1;
 usename
----------
 postgres
(1 linha)
testdb=> SELECT usename FROM ':tabela' WHERE usesysid=1;
ERRO:  erro de sintaxe em ou próximo de "':tabela'" no caractere 21
testdb=> SELECT usename FROM ":tabela" WHERE usesysid=1;
ERRO:  a relação ":tabela" não existe

Uma aplicação comum desta funcionalidade é para fazer referência nos comandos subseqüentes ao último OID inserido, para construir um cenário de chave estrangeira. Outra utilização possível deste mecanismo é para copiar o conteúdo de um arquivo para uma coluna de uma tabela. Primeiro deve ser carregado o arquivo na variável, e depois proceder conforme mostrado.

testdb=> \set conteudo '\'' `cat meu_arquivo.txt` '\''
testdb=> INSERT INTO minha_tabela VALUES (:conteudo);

Um problema possível com esta abordagem é que meu_arquivo.txt pode conter apóstrofos, que devem ser precedidos por contrabarra para não causarem erro de sintaxe quando a segunda linha for processada, o que pode ser feito por meio do programa sed:

testdb=> \set conteudo '\'' `sed -e "s/'/\\\\\\'/g" < meu_arquivo.txt` '\''

Deve ser observado o número correto de contabarras (6)! Isto funciona da seguinte maneira: Após o psql ter analisado esta linha, enviará sed -e "s/'/\\\'/g" < meu_arquivo.txt para o interpretador de comandos, que fará suas próprias atividades dentro das aspas e executará o sed com os argumentos -e e s/'/\\'/g. Quando o sed fizer a análise substituirá as duas contrabarras por uma única e, então, fará a substituição. Talvez em algum ponto tenha se pensado ser ótimo todos os comandos Unix utilizarem o mesmo caractere de escape (escape character). Isto tudo ainda ignora o fato de ter que colocar contrabarra na frente de contrabarra também, porque as constantes textos do SQL também estão sujeitas a certas interpretações. Neste caso é melhor preparar o arquivo externamente.

Uma vez que os dois-pontos podem aparecer legalmente nos comandos SQL, a seguinte regra se aplica: a seqüência de caracteres ":nome" não é modificada a menos que "nome" seja o nome de uma variável atualmente definida. Sempre pode ser feito o escape dos dois-pontos com uma contrabarra para protegê-lo da substituição (A sintaxe dos dois-pontos para as variáveis é padrão SQL para linguagens de comandos incorporados, tal como ECPG. A sintaxe de dois-pontos para "faixa de matriz" e "conversão de tipo" são extensões do PostgreSQL, daí o conflito).

Prompt

Os prompts emitidos pelo psql podem ser personalizados conforme a preferência. As três variáveis PROMPT1, PROMPT2 e PROMPT3 contêm cadeias de caracteres e seqüências especiais de escape que descrevem a aparência do prompt. O prompt 1 é o prompt normal emitido quando o psql solicita um novo comando. O prompt 2 é emitido durante a entrada do comando quando mais entrada é aguardada, porque o comando não foi terminado por um ponto-e-vírgula, ou um apóstrofo não foi fechado. O prompt 3 é emitido quando se executa o comando COPY do SQL, e se espera que os valores das linhas sejam digitados no terminal.

O valor da variável de prompt selecionada é exibido literalmente, exceto quando um sinal de percentagem (%) é encontrado. Dependendo do caractere seguinte, certos outros textos são colocados em seu lugar. As substituições definidas são:

%M
O nome completo do hospedeiro do servidor de banco de dados (com o nome do domínio), ou [local] se a conexão for através de um soquete do domínio Unix, ou [local:/dir/nome], se o soquete do domínio Unix não estiver no local padrão da compilação.
%m
O nome, truncado no primeiro ponto, do hospedeiro do servidor de banco de dados, ou [local] se a conexão for através de um soquete do domínio Unix.
%>
O número da porta na qual o servidor de banco de dados está escutando.
%n
O nome do usuário da sessão de banco de dados (A expansão deste valor pode mudar durante a sessão de banco de dados como resultado do comando SET SESSION AUTHORIZATION.)
%/
O nome do banco de dados corrente.
%~
Como %/, mas a saída será "~" (til) se o banco de dados for o banco de dados padrão.
%#
Se o usuário da sessão for um superusuário do banco de dados então um #, senão > (A expansão deste valor pode mudar durante a sessão de banco de dados como resultado do comando SET SESSION AUTHORIZATION.)
%R
No prompt 1 normalmente "=", mas "^" se estiver no modo linha-única, e "!" se a sessão estiver desconectada do banco de dados (o que pode acontecer se \connect não for bem-sucedido). No prompt 2 a seqüência é substituída por "-", "*", apóstrofo, ou aspas,
%x
Status da transação: uma cadeia de caracteres vazia quando não estiver dentro de um bloco de transação, ou * quando estiver dentro de um bloco de transação, ou ! quando estiver em um bloco de transação que falhou, ou ? quando o estado da transação for indeterminado (por exemplo, porque não há conexão).
%dígitos
O caractere com o código numérico indicado é substituído. Se dígitos começar por 0x os demais caracteres são interpretados como hexadecimal; senão, se o primeiro dígito for 0, os dígitos são interpretados como octal; senão os dígitos são lidos como um número decimal.
%:nome:
O valor da variável do psql nome. Veja a seção Variáveis para obter detalhes.
%`comando`
A saída do comando, semelhante à substituição de "crase" normal.

Para inserir um sinal de percentagem no prompt deve ser escrito %%. Os prompts padrão são '%/%R%# ' para os prompts 1 e 2, e '>> ' para o prompt 3.

Nota: Esta funcionalidade foi desavergonhadamente plagiada do tcsh.

Edição da linha de comando

O psql usa a biblioteca Readline para fornecer uma recuperação e edição de linha conveniente. O histórico dos comandos é armazenado no arquivo chamado .psql_history no diretório home do usuário, sendo recarregado quando o psql inicia. Completar com a tecla de tabulação também é suportado, embora a lógica do ato de completar não pretenda ser a de um analisador SQL. Se por algum motivo não se gostar de completar com tabulação, pode-se desativar especificando isto no arquivo chamado .inputrc no diretório home do usuário:

$if psql
set disable-completion on
$endif

(Esta não é uma funcionalidade do psql, mas sim do Readline. Leia sua documentação para obter mais detalhes).

Ambiente

HOME
Diretório do arquivo de inicialização (.psqlrc) e do arquivo de histórico dos comandos (.psql_history).
PAGER
Se o resultado do comando não couber na tela, então é mostrado por meio deste comando. Os valores típicos são more e less. O padrão depende da plataforma. O uso de um paginador pode ser desabilitado por meio do comando \pset.
PGDATABASE
Banco de dados padrão para conectar.
PGHOST
PGPORT
PGUSER
Parâmetros padrão para conexão.
PSQL_EDITOR
EDITOR
VISUAL
Editor utilizado pelo comando \e. As variáveis são examinadas na ordem listada; a primeira que estiver definida é utilizada.
SHELL
Comando executado pelo meta-comando \!.
TMPDIR
Diretório para armazenar os arquivos temporários. O padrão é /tmp.

Arquivos

Observações

Exemplos

O primeiro exemplo mostra como distribuir um comando por várias linhas de entrada. Deve ser observada a mudança do prompt:

testdb=> CREATE TABLE minha_tabela (
testdb(> first integer not null default 0,
testdb(> second text
testdb-> );
CREATE TABLE

Agora veja novamente a definição da tabela:

testdb=> \d minha_tabela
             Table "minha_tabela"
 Attribute |  Type   |      Modifier
-----------+---------+--------------------
 first     | integer | not null default 0
 second    | text    |

Agora o prompt será mudado para algo mais interessante:

testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>

Vamos assumir que a tabela já esteja com dados e queremos vê-los:

peter@localhost testdb=> SELECT * FROM minha_tabela;
 first | second
-------+--------
     1 | one
     2 | two
     3 | three
     4 | four
(4 linhas)

As tabelas podem ser mostradas de forma diferente usando o comando \pset:

peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM minha_tabela;
+-------+--------+
| first | second |
+-------+--------+
|     1 | one    |
|     2 | two    |
|     3 | three  |
|     4 | four   |
+-------+--------+
(4 linhas)
peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM minha_tabela;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 linhas)
peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep ","
Field separator is ",".
peter@localhost testdb=> \pset tuples_only
Showing only tuples.
peter@localhost testdb=> SELECT second, first FROM minha_tabela;
one,1
two,2
three,3
four,4

Como alternativa, podem ser usados os comandos curtos:

peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM minha_tabela;
-[ RECORD 1 ]-
first  | 1
second | one
-[ RECORD 2 ]-
first  | 2
second | two
-[ RECORD 3 ]-
first  | 3
second | three
-[ RECORD 4 ]-
first  | 4
second | four

Identificadores SQL em meta-comandos do psql. Este exemplo mostra a diferença de sintaxe dos identificadores SQL quando usados em comandos SQL e meta-comandos do psql. Não é possível utilizar foo"BAR"baz em CREATE TABLE, mas é possivel utilizar em \dt. [10]

=> CREATE TABLE "Um nome"" estranho" (foo text);
CREATE TABLE

=> CREATE TABLE foo"BAR"baz (foo text);
ERRO:  erro de sintaxe em ou próximo de ""BAR"" no caractere 17

=> CREATE TABLE "fooBARbaz" (foo text);
CREATE TABLE

=> \dt

                Lista de relações
 Esquema |       Nome        |  Tipo  |   Dono
---------+-------------------+--------+----------
 public  | Um nome" estranho | tabela | postgres
 public  | fooBARbaz         | tabela | postgres
(2 linhas)

=> \dt fooBARbaz
Não foi encontrada relação correspondente.

=> \dt "fooBARbaz"

            Lista de relações
 Esquema |   Nome    |  Tipo  |   Dono
---------+-----------+--------+----------
 public  | fooBARbaz | tabela | postgres
(1 linha)

=> \dt foo"BAR"baz

            Lista de relações
 Esquema |   Nome    |  Tipo  |   Dono
---------+-----------+--------+----------
 public  | fooBARbaz | tabela | postgres
(1 linha)

Notas

[1]

Veja no Capítulo 46 um exemplo de como personalizar as mensagens mostradas pelo psql. (N. do T.)

[2]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[3]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[4]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[5]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[6]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[7]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[8]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[9]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

[10]

Exemplo escrito pelo tradutor, não fazendo parte do manual original.

SourceForge.net Logo