psql - Conheça o básico

O utilitário psql, é a ferramenta padrão para acesso ao PostgreSQL. Embora seja mais comum o uso de ferramentas gráficas, como o pgAdmin3, é importante entender como usar o psql, pois nem sempre se tem a possibilidade de usar ferramentas gráficas.

[ Hits: 97.783 ]

Por: Hugo Cerqueira em 28/07/2014


Conheça o básico do psql



Introdução

Caro(a) Leitor(a),

Talvez você já tenha percebido que a ferramenta padrão para acesso ao PostgreSQL é o psql, um utilitário de linha de comando, aparentemente simples, porém, cheio de recursos interessantes.

Vale a pena conhecê-la, pois você nunca sabe quando se encontrará numa situação em que não tem a possibilidade de usar ferramentas gráficas para acesso ao PostgreSQL.

Eu já vi algumas pessoas cometerem equívocos comuns com o psql, por não conhecerem o básico de seu funcionamento, então, vou explicá-lo aqui.

Para se conectar a um banco de dados, você precisa informar sempre com que usuário deseja fazer a conexão e a qual banco de dados deseja se conectar. Deve informar também, qual é o nome ou IP do servidor onde está esse banco de dados.

Para isto, servem os parâmetros do comando psql:
  • -h :: para informar o host (IP ou nome do host);
  • -U :: para informar o nome do usuário;
  • -d :: para informar o nome do banco de dados.

Dependendo da conexão que você quiser fazer, alguns parâmetros podem ser omitidos, mas ao omitir um parâmetro necessário, você não conseguirá fazer a conexão.

Vou explicar isso com alguns exemplos.

Exemplos de conexão

Suponha que eu queira fazer uma conexão ao banco de dados hugo, com o usuário postgres, que fica no servidor 192.168.56.101. Para isto, eu deveria usar o comando:

# psql -h 192.168.56.101 -U postgres -d hugo

Agora, vamos supor que o banco de dados fica em minha máquina local. Nesse caso, eu poderia fazer o acesso de duas formas: via TCP/IP ou conexão local (via soquete).

Para fazer a conexão via TCP/IP, basta usar o comando como vimos acima:

# psql -h 127.0.0.1 -U postgres -d hugo

Porém, para fazer uma conexão local, basta não usar o parâmetro -h, ou seja:

# psql -U postgres -d hugo

Se em vez de tentar acessar o banco hugo, eu quiser acessar o banco postgres, eu poderia usar o comando:

# psql -U postgres

Isto é possível, porque os nomes de usuário e de banco de dados são iguais. Mas, se os nomes de usuário e banco de dados forem diferentes, o parâmetro -d tem que ser informado.

Agora, vamos supor que eu queira fazer uma conexão local ao banco postgres e que meu usuário de GNU/Linux (ou de outro sistema operacional) tem o mesmo nome que o meu usuário do PostgreSQL.

Nesse caso, eu poderia fazer a conexão assim:

# psql -d postgres

Dessa forma, eu vou me conectar com meu próprio usuário (hugo) ao banco postgres. Mas vamos supor agora, que ao invés do banco postgres, eu quero me conectar a um banco de dados com o nome igual ao do meu usuário (ou seja, hugo). Nesse caso, eu poderia fazer a conexão da seguinte forma:

# psql

Isto seria o equivalente a usar o comando:

# psql -h localhost -U hugo -d hugo

Perceba, portanto, que para fazer a conexão usando psql sem passar nenhum parâmetro eu, necessariamente, tenho que estar fazendo uma conexão local, com um usuário de sistema igual ao usuário do PostgreSQL e acessando um banco de dados, cujo nome seja idêntico ao nome do meu usuário.

Se em determinada situação você estiver em dúvida se pode ou não omitir algum parâmetro, é melhor não omitir. Assim você garante que a conexão vai funcionar.

Prompts de comando

Quando você faz acesso a um banco de dados via psql, vai aparecer em sua tela um prompt com o nome do banco ao qual você se conectou, seguido de um sinal de igual (=) e depois um símbolo que pode ser um sinal de maior (>), ou uma cerquilha (#).

Isso vai depender de qual usuário você escolheu para se conectar. Se você for um superusuário, como geralmente é o caso do usuário postgres, você verá o sinal de cerquilha. Caso seja um usuário normal, verá um sinal de maior.

Por exemplo, se eu fizer o acesso como postgres (sendo ele um superusuário) ao banco postgres, apareceria assim:

  postgres=#

Mas, se acessar como usuário hugo (sendo ele um usuário normal) ao banco hugo, apareceria assim:

  hugo=>

Se eu fizer o acesso como usuário hugo ao banco postgres, apareceria assim:

  postgres=>

Por fim, se eu fizer o acesso como usuário postgres ao banco hugo, apareceria assim:

  hugo=#

Ou seja, você sempre poderá ver qual banco está acessando só de olhar o prompt. Porém, pode em determinado momento, se esquecer de qual usuário está conectado. Se isso acontecer, use o comando:

select current_user;

É importante lembrar que o PostgreSQL faz subdivisões no banco de dados, os esquemas. Por padrão, o psql tenta se conectar primeiro a um esquema cujo nome seja igual ao do usuário.

Caso esse esquema não exista, o psql conecta-se ao esquema public. Se você quiser, por exemplo, se conectar ao esquema testes, deverá executar o comando:

set search_path to testes;

Comandos próprios do psql

Além de realizar comandos SQL, o psql também inclui alguns comandos próprios. Por exemplo, para sair do psql, você deve usar o comando \q (note que é uma barra invertida mesmo).

Existem várias opções interessantes, veja alguns exemplos:
  • \d :: lista as tabelas do banco de dados
  • \dv :: lista as views do banco de dados
  • \di :: lista os índices do banco de dados
  • \db :: lista as tablespaces
  • \l :: lista os bancos de dados
  • \dg :: lista as roles existentes (usuários ou grupos)
  • \conninfo :: apresenta informações sobre a conexão atual
  • \h :: lista os comandos SQL
  • \h comando :: apresenta detalhes sobre o comando

Existem várias outras opções, você pode ver cada uma delas com o comando: \?

Conclusão

Como você pode ver, o psql não é nenhum bicho de sete cabeças, mas é importante conhecer o básico dessa ferramenta antes de começar a usá-la, para evitar eventuais dificuldades.

Para ver informações mais detalhadas sobre esse utilitário, verifique a documentação oficial:
Espero ter ajudado e fico à disposição para sanar eventuais dúvidas.

   

Páginas do artigo
   1. Conheça o básico do psql
Outros artigos deste autor

Entenda o XML - Parte 3

Entenda o XML - Parte 1

Modelos de Negócio para o Software Livre

Entenda o XML - Parte 2

Aprisionamento Tecnológico

Leitura recomendada

Sincronizando Dados do PostgreSQL no Elasticsearch

Encoding do Postgres (latin1) e encoding do SO (Debian/Ubuntu)

HowTo: Como criar Cluster Linux - Ativo/Passivo para Postgres com DRBD, Pacemaker e Corosync

PgBouncer - Instalação no Debian 6.0 Squeeze

Replicando banco de dados PostgreSQL

  
Comentários
[1] Comentário enviado por ederpaulopereira em 28/07/2014 - 15:28h

Estou fazendo replicação síncrona entre 2 servidores postgresql 9.3. O uso do psql é muito bom, não quero menosprezar o pgadmin, mas às vezes o psql é muito mais eficaz, rápido e simples, sem frescuras, vai direto ao ponto. Parabéns amigo.

[2] Comentário enviado por lindomarbernardi em 26/08/2014 - 18:13h

uso o programa stq 1,8 ubuntu 14.04
tive que que trocar de computador
reinstalo o sistema stoq tudo bem com pg_restore -d stoq stoq.dump
mas na hora de adicionar a impressora ele não adiciona
diz permissão negada

tem como mudar no banco de dados as informações do computador e usuário pra criar tudo novo sem perder os dados
se puder me ajudar fico agradecido

lindomarbernardi@ibest.com.br

[3] Comentário enviado por hrcerq em 26/08/2014 - 22:56h

Caro Lindomar, acho que não compreendi muito bem o problema. Estamos falando de um erro de permissão dentro do PostgreSQL?

Se for o caso, pode ser que a estrutura de usuários e grupos na máquina antiga não exista na máquina nova. Geralmente isso acontece quando vc só faz o backup de um banco específico, o que não inclui os usuários e grupos do sistema original. Nesse caso a restauração dos dados não consegue recuperar as permissões originais. Se for isso o que aconteceu, então vc precisaria restaurar também a estrutura de usuários e grupos que existia na outra máquina e então aplicar as permissões. Uma alternativa seria vc remover o banco, adicionar os usuários e grupos que vc precisa e novamente importar o banco.

Pelo que sei, o pg_restore é usado apenas em backups personalizados. Caso contrário, usa-se o próprio psql, por exemplo:

psql -U postgres stoq < stoq.dump

Não sei se consegui ajudar muito, mas acredito que o melhor seria vc abrir um tópico no forum aqui do Viva o Linux, porque assim mais pessoas vão poder te ajudar.

[4] Comentário enviado por lindomarbernardi em 27/08/2014 - 19:45h

aparece que não tem permissão para acesso as portas usbo

não tem como adicionar este usuario para ter acesso
pois coloquei o mesmo usuario e o mesmo nome do computador, tinha que dar certo

[5] Comentário enviado por hrcerq em 27/08/2014 - 21:02h

Ah, nesse caso eu receio que não seja um problema de permissão do PostgreSQL, você está falando da configuração do sistema mesmo. Sendo assim eu receio que não possa te ajudar muito.

Vou recomendar novamente que você abra um tópico no fórum, porque é mais fácil que alguém que tenha o conhecimento necessário veja e então possa te ajudar.

[6] Comentário enviado por fabianebalz em 21/10/2015 - 16:53h

Olá Hugo, ótimo post! Trabalho com os psql e acho que util, porém agora estou fazendo a migração do meu BD para 9.3
Quando foi reinstalado tudo certinho fui utilizar o psql e a forma de saida dos dados na tela esta diferente...

Quando executo uma query o terminal me mostra o resultado, porém ele não deixa dar continuar a escrever.... só consigo escrever novamente se der um \q

Porém quando dou um \q o resultado da query some...

Isso dificulta a comparação e analise dos dados...

Você teria alguma dica para que eu possa fazer a alteração desta configuração do psql?

Desde já agradeço qq ajuda!




[7] Comentário enviado por hrcerq em 22/10/2015 - 14:12h


[6] Comentário enviado por fabianebalz em 21/10/2015 - 16:53h

Olá Hugo, ótimo post! Trabalho com os psql e acho que util, porém agora estou fazendo a migração do meu BD para 9.3
Quando foi reinstalado tudo certinho fui utilizar o psql e a forma de saida dos dados na tela esta diferente...

Quando executo uma query o terminal me mostra o resultado, porém ele não deixa dar continuar a escrever.... só consigo escrever novamente se der um \q

Porém quando dou um \q o resultado da query some...

Isso dificulta a comparação e analise dos dados...

Você teria alguma dica para que eu possa fazer a alteração desta configuração do psql?

Desde já agradeço qq ajuda!





Olá, Fabiane. Esse comportamento não é esperado. Teria como você mostrar o comando que executou, e o resultado que apareceu? Você pode copiar e colar aqui ou postar o link de um print da tela. Com isso fica mais fácil identificar o que pode estar acontecendo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts