Como listar e conectar nos bancos Postgres usando o psql?

Comandos básicos do Postgres PSQL para conectar em um servidor, listar os bancos, tabelas e índices.

Como listar e conectar nos bancos Postgres usando o psql?
🟢
Nivel: Fácil/Iniciante
Pré-requisitos: Conhecimentos básicos de banco de dados e Postgres
TL;DR ↪ Se você precisar apenas dos comandos, clique aqui para rolar a página direto para o resumo TL;DR!

📖 Índice

Assim como temos um artigo básico sobre listar e conectar usando o MySQL, esse é um artigo bem básico sobre os primeiros comandos do Postgres no psql .

Antes de começar, precisamos entender que, o psql é a console do Postgres cli (command-line interface). Com ele, além de executar queries, você também pode rodar uma série de comandos do próprio Postgres para realizar diversos tipos de operações.

Então vamos para os primeiros passos com o Postgres e o psql!

Como instalar o psql?

A instalação do psql vai depender de qual sistema operacional você está utilizando.

Como instalar o psql no Windows?

Se você está no Windows e já tem o Postgres instalado, provavelmente já tem o psql também. Se por um acaso não tiver, baixe o instalador no site oficial 🔗, instale e pronto, tudo certo!

Como instalar o psql no Linux Ubuntu?

Se você está no Linux Ubuntu, é só usar o apt.

sudo apt-get update
sudo apt-get install postgresql-client
Comando para instalar o psql no Ubuntu

Como instalar o psql no Mac?

Se você está no Mac, você pode utilizar o Brew, que é excelente gerenciador de pacotes, tipo o apt do Linux, so que para o Mac.

brew install libpq
Comando para instalar o psql no Mac
💡
Se você quiser instalar sem que o brew atualize todos os seus pacotes atuais, use essa dica: Como instalar pacotes no brew sem o autoupdate?

Como conectar no psql?

Se você precisar se conectar em um server local, utilize o comando abaixo:

psql -U postgres

Agora, se você precisa se conectar em um server remoto, você precisará informar o hostname. Para isso, utilize o comando:

psql -U postgres -h ip_ou_hostname
Conectar em um servidor Postgres remoto.

O parâmetro -U é o usuário e -h o endereço do servidor (ip ou hostname).

Lembre-se que, para que um servidor remoto aceite conexões externas, você precisa que a porta 5432 esteja liberada no firewall e que o parâmetro listen_addresses  do postgresql.conf esteja aceitando o ip do host remoto ou * para qualquer endereço.

Como listar os bancos de dados Postgres no psql?

Para listar todas as bases de dados de um servidor Postgres via psql, execute o seguinte comando \l

postgres=# \l
                              List of databases
   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges   
-----------+----------+----------+---------+---------+-----------------------
 postgres  | postgres | UTF8     | C.UTF-8 | C.UTF-8 | 
 template0 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 template1 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
           |          |          |         |         | postgres=CTc/postgres
 dev1      | postgres | UTF8     | C.UTF-8 | C.UTF-8 | 
 dev2      | postgres | UTF8     | C.UTF-8 | C.UTF-8 | 
(5 rows)
Comando \l para listar todos os bancos de dados os servidor

Como trocar de banco de dados Postgres via psql?

Para trocar de banco de dados Postgres via psql em um servidor, execute o seguinte comando \c nome_do_banco;

postgres=# \c dev2
You are now connected to database "dev2" as user "postgres".
Comando para conectar em outro banco. No exemplo de postgres para dev2

Como listar as tabelas de um banco de dados Postgres via psql?

Para listar todas as tabelas de um banco de dados Postgres via psq, execute o seguinte comando \dt ou \dt+ . O comando com o '+' exibe também o tamanho da tabela.

dev2=# \dt
               List of relations
 Schema |        Name        | Type  |  Owner   
--------+--------------------+-------+----------
 public | post_data          | table | postgres
 public | tag_data           | table | postgres
 public | post_tag           | table | postgres
(3 rows)

dev2=# \dt+
                                          List of relations
 Schema |        Name        | Type  |  Owner   | Persistence | Access method |  Size   | Description 
--------+--------------------+-------+----------+-------------+---------------+---------+-------------
 public | post_data          | table | postgres | permanent   | heap          | 16 kB   | 
 public | tag_data           | table | postgres | permanent   | heap          | 26 MB   | 
 public | post_tag           | table | postgres | permanent   | heap          | 109 MB  | 
(3 rows)
Listando as tabelas de um determinado banco de dados Postgres

Como listar as os campos de uma tabela Postgres via psql?

Para listar todos os campos e detalhes de uma tabela de um banco de dados Postgres via psql, execute o seguinte comando \d nome_tabela

dev2=# \d tag_data
                                        Table "public.tag_data"
   Column   |            Type             | Collation | Nullable |               Default                
------------+-----------------------------+-----------+----------+--------------------------------------
 id         | integer                     |           | not null | nextval('tag_data_id_seq'::regclass)
 tag_name   | text                        |           | not null | 
 created_at | timestamp without time zone |           |          | CURRENT_TIMESTAMP
Indexes:
    "tag_data_pkey" PRIMARY KEY, btree (id)
    "idx_tag_name" btree (tag_name)
Listando os campos de uma tabela Postgres

Observe que com esse comando, além dos campos, os índices e triggers da tabela também são exibidos.

TL;DR | Resumo

# Conectar em um servidor Postgres local
psql -U nome_usuario

# Conectar em um servidor Postgres remoto
psql -U nome_usuario -h ip_ou_hostname

# Dentro do psql
# Listar todos os bancos
\l

# Conectar em um banco de dados
\c nome_banco

# Listar tabelas de do banco corrente
\dt

# Listar campos e detalhes de uma tabela
\d nome_tabela;