Como listar os índices de uma tabela do Postgres? [2 maneiras]
Nesse artigo você irá aprender a listar os indices de uma tabela do Postgres usando consulta ou o psql
Pré-requisitos: Conhecimentos básicos de linha 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
Listar e exibir os índices de uma tabela no Postgres não é tão direta como em outros bancos de dados. Mas é simples de certa maneira.
O Postgres fornece uma view padrão chamada pq_indexes
que retorna as informações de índices de todas as tabelas do banco.
Essa view padrão pq_indexes
retorna 5 campos:
schemaname
: Retorna o nome do schema que contem a tabela. Em geral, se você usar tudo padrão será "public" ou "pg_catalog";tablename
: Retorna o nome da tabela que contem o índice;indexname
: Retorna o nome do índice;tablespace
: Retorna o nome do tablespace se você utilizar, senão null;indexdef
: Retorna a definição do índice. Efetivamente o comando CREATE INDEX.
Como listar os índices de uma tabela no Postgres com um SELECT?
Para listar os índices de uma determinada tabela no Postgres você pode executar a seguinte consulta na view pg_indexes. Usando como exemplo a tabela "users".
SELECT * FROM pg_indexes WHERE tablename = 'nome_tabela'
/* Output */
schemaname | tablename | indexname | tablespace | indexdef
------------+---------------+------------------------+------------------+------------------------------------------------------------------------------------
public users users_email_unique null CREATE UNIQUE INDEX users_email_unique ON public.users USING btree (email)
public users users_pkey null CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id)
Observe que a view retorna os comandos de CREATE INDEX, já prontinhos 🙂
CREATE UNIQUE INDEX users_email_unique ON public.users USING btree (email)
CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id)
Como listar os índices de uma tabela no Postgres usando o psql?
Outra maneira simples de listar os índices de uma tabela no Postgres é psql (já falamos sobre ele aqui).
O primeiro passo é abrir o psql
e conectar no seu servidor. Em seguida, você pode executar um \l
para listar todos os bancos. Em seguida, execute um \c nome_do_banco
para conectar no banco que deseja ver os índices.
/* Listar os bancos */
\l
/* Output */
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
200ok | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres postgres=CTc/postgres
(4 rows)
/* Conectar em um banco Postgres */
\c 200ok
/* Output */
You are now connected to database "200ok" as user "postgres".
/* Listar todas as tabelas do banco Postgres */
\dt
/* Output */
List of relations
Schema | Name | Type | Owner
--------+-------+-------+----------
public | users | table | postgres
(1 row)
Por fim, execute um \d nome_tabela
para listar os detalhes de uma tabela do banco, incluindo os índices.
/* Detalhes de uma tabela do Postgres, incluindo os indices */
\d nome_tabela
/* Output */
Table "public.users"
Column | Type | Collation | Nullable | Default
-------------------+--------------------------------+-----------+----------+---------
id | bigint | | not null |
name | character varying(255) | | not null |
email | character varying(255) | | not null |
email_verified_at | timestamp(0) without time zone | | |
password | character varying(255) | | not null |
remember_token | character varying(100) | | |
created_at | timestamp(0) without time zone | | |
updated_at | timestamp(0) without time zone | | |
nickname | character varying(255) | | |
cpf | character varying(255) | | |
profile_image | character varying(255) | | |
cover_image | character varying(255) | | |
whatsapp | character varying(255) | | |
twitter | character varying(255) | | |
youtube | character varying(255) | | |
discord | character varying(255) | | |
instagram | character varying(255) | | |
twitch | character varying(255) | | |
linkedin | character varying(255) | | |
spotify | character varying(255) | | |
steam | character varying(255) | | |
tumblr | character varying(255) | | |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_email_unique" UNIQUE CONSTRAINT, btree (email)
Observe que a listagem de índices vem no final:
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_email_unique" UNIQUE CONSTRAINT, btree (email)
TL;DR | Resumo
# Usando consultas
SELECT * FROM pg_indexes WHERE tablename = 'nome_tabela'
# Usando psql
\d nome_tabela
Espero que essa dica tenha sido útil, valeu!