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.