Dominando o psql: Um Guia Essencial para Meta-Comandos do PostgreSQL
Aprenda os meta-comandos do psql que ajudam a inspecionar esquemas, formatar saída, alternar bancos de dados e trabalhar mais rapidamente no terminal.
Potencializando o psql: Um Guia Essencial para os Meta-Comandos do PostgreSQL
Quando você trabalha com PostgreSQL a partir de um terminal, os meta-comandos do psql evitam que você escreva consultas de catálogo para verificações cotidianas. Esses comandos com barra invertida ajudam a listar tabelas, descrever objetos, alternar bancos de dados, formatar saída e obter ajuda sem sair da sua sessão.
Este guia aborda os comandos psql que você usará com mais frequência e mostra onde eles se encaixam no trabalho real com bancos de dados.
Entendendo os Meta-Comandos do psql
Os meta-comandos no psql são diretivas processadas pelo próprio psql, em vez de serem enviadas ao servidor PostgreSQL para execução. Eles são facilmente identificáveis pela barra invertida (\) inicial. Essa distinção é crucial porque os meta-comandos têm sua própria sintaxe e comportamento, separados do SQL padrão.
Por exemplo, enquanto você poderia escrever SELECT * FROM information_schema.tables; para listar todas as tabelas, um meta-comando psql pode alcançar o mesmo resultado com um simples \dt.
Meta-Comandos Essenciais para Inspeção de Banco de Dados
Inspecionar a estrutura do seu banco de dados é uma tarefa frequente. O psql fornece vários meta-comandos para tornar esse processo simples.
Listando Tabelas (\dt)
O comando \dt é um dos meta-comandos mais usados. Ele lista todas as tabelas no banco de dados atual, junto com seu esquema e proprietário.
Exemplo:
\dtSaída:
Lista de relações Esquema | Nome | Tipo | Proprietário --------+------------+-------+---------- public | contas | tabela| postgres public | produtos | tabela| postgres vendas | pedidos | tabela| dbadmin (3 linhas)Variações:
\dt+: Fornece informações mais detalhadas, incluindo tamanho da tabela e descrição.\dt esquema.*: Lista tabelas apenas em um esquema específico.
Descrevendo Tabelas e Colunas (\d)
O comando \d é inestimável para entender a estrutura de uma tabela específica, incluindo suas colunas, tipos de dados, restrições e índices.
Exemplo: Para descrever a tabela
produtos:\d produtosSaída:
Tabela "public.produtos" Coluna | Tipo | Collation | Nulo | Padrão ------------+-----------------------+-----------+------+--------- produto_id | integer | | não nulo | nome | character varying(100)| | | preco | numeric(10, 2) | | | Índices: "produtos_pkey" PRIMARY KEY, btree (produto_id)Variações:
\d+ nome_tabela: Fornece informações ainda mais detalhadas, incluindo parâmetros de armazenamento e comentários.\dn: Lista todos os esquemas.\df: Lista todas as funções.\dv: Lista todas as visões.
Inspecionando Visões (\dv)
Semelhante às tabelas, você pode listar e descrever visões.
Exemplo (Listar visões):
\dvExemplo (Descrever uma visão):
\dv minha_visao
Listando Esquemas (\dn)
Para ver todos os esquemas presentes no seu banco de dados, use o comando \dn.
- Exemplo:
\dn
Meta-Comandos para Gerenciamento de Consultas e Controle de Saída
O psql oferece opções poderosas para controlar como os resultados das consultas são exibidos e para gerenciar seu histórico de consultas.
Temporização de Consultas (\timing)
O comando \timing alterna a exibição do tempo decorrido para cada consulta SQL. É útil para comparações rápidas ao ajustar uma consulta, embora você deva usar EXPLAIN (ANALYZE, BUFFERS) quando precisar de um plano de execução real.
Exemplo (Ativar temporização):
\timing onAgora, toda consulta que você executar será seguida pelo seu tempo de execução.
Exemplo (Desativar temporização):
\timing off
Formatação de Saída (\a, \H, \t)
\a: Alterna entre saída alinhada (tabela) e não alinhada (semelhante a CSV). A saída não alinhada é frequentemente mais fácil de ser analisada programaticamente.\a SELECT * FROM produtos;\H: Muda o formato de saída para HTML.\H SELECT * FROM produtos;\t: Alterna a exibição dos cabeçalhos das colunas e rodapés com contagem de linhas. Isso é útil quando você deseja uma saída mais fácil de canalizar para outro comando.\t SELECT nome, preco FROM produtos;
Paginação (\pset pager)
Se os resultados da sua consulta forem longos, o psql pode usar um paginador como less, dependendo do seu ambiente e configurações de paginador. Controle esse comportamento com \pset pager.
Exemplo (Usar paginador para saída longa):
\pset pager onExemplo (Desabilitar paginador):
\pset pager off
Meta-Comandos Administrativos
Além de inspeção e controle de saída, o psql fornece comandos para tarefas administrativas comuns.
Listando Bancos de Dados (\l)
Para ver todos os bancos de dados disponíveis no servidor PostgreSQL conectado, use \l.
- Exemplo:
\l
Conectando a um Banco de Dados Diferente (\c)
Se você já está conectado a uma sessão psql e deseja alternar para outro banco de dados, use o comando \c.
- Exemplo: Para conectar ao banco de dados
meubanco:\c meubanco
Executando \? para Ajuda
Em caso de dúvida, o psql fornece seu próprio sistema de ajuda. O comando \? lista todos os meta-comandos disponíveis, e \! permite executar comandos do shell.
Exemplo (Listar todos os meta-comandos):
\?Exemplo (Executar um comando do shell, por exemplo,
ls):\! ls -l
Melhores Práticas e Dicas
- Use aliases de shell para comandos
psqlcompletos: Aliases de shell não podem executar\dtdentro de uma sessãopsqljá aberta, mas podem encurtar comandos de inicialização comuns. Por exemplo,alias pprod='psql "postgresql://[email protected]/prod"'. - Combine com SQL: Meta-comandos não são mutuamente exclusivos com SQL. Você pode usá-los para inspecionar rapidamente o esquema antes de escrever uma instrução
SELECTou usar\timingpara comparar tempos de execução de consultas. - Entenda o Escopo: Lembre-se de que os meta-comandos operam dentro do contexto da sua sessão e conexão
psqlatual. Comandos como\cmudarão o banco de dados ativo para essa sessão. - Use
\?Generosamente: A ajuda embutida é abrangente e um excelente recurso quando você precisa lembrar de um comando ou descobrir novos.
Conclusão
Comece com \dt, \d, \dn, \l, \c, \timing, \pset pager e \?. Esses poucos comandos cobrem a maior parte do trabalho de inspeção diário e fazem o psql parecer muito menos um prompt SQL bruto.