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.
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.