Alguns SGBDs como Oracle, MySQL e MariaDB possuem um
DESCRIBE
comando que retorna informações sobre tabelas e visualizações. Vai DESCRIBE table
em que table é o nome da tabela ou exibição, e também pode ser seguido por um nome de coluna se você quiser apenas informações sobre uma coluna específica. PostgreSQL não tem um
DESCRIBE TABLE
comando como tal, mas existem alternativas. O \d
Comando
Se você estiver usando o
psql
, uma maneira rápida de retornar informações da tabela é com o \d
comando. Este comando mostra informações sobre tabelas, visualizações, visualizações materializadas, índices, sequências ou tabelas estrangeiras. Podemos, portanto, usar este comando como um DESCRIBE TABLE
alternativo. Sintaxe
A sintaxe fica assim:
\d[S+] [ pattern ]
Aqui,
pattern
pode ser o nome da tabela (ou outro objeto) ou pode ser uma expressão regular. Se \d
é usado sem um pattern
argumento, é equivalente a \dtvmsE
que mostrará uma lista de todas as tabelas visíveis, visualizações, visualizações materializadas, sequências e tabelas estrangeiras. Por padrão, apenas objetos criados pelo usuário são mostrados, mas você pode fornecer um padrão ou o
S
modificador para incluir objetos do sistema. Exemplo
Aqui está um exemplo de uso de
\d
para retornar informações sobre uma tabela chamada actor
:\d public.actor
Resultado:
Table "public.actor" +-------------+-----------------------------+-----------+----------+-----------------------------------------+ | Column | Type | Collation | Nullable | Default | +-------------+-----------------------------+-----------+----------+-----------------------------------------+ | actor_id | integer | | not null | nextval('actor_actor_id_seq'::regclass) | | first_name | character varying(45) | | not null | | | last_name | character varying(45) | | not null | | | last_update | timestamp without time zone | | not null | now() | +-------------+-----------------------------+-----------+----------+-----------------------------------------+ Indexes: "actor_pkey" PRIMARY KEY, btree (actor_id) "idx_actor_last_name" btree (last_name) Referenced by: TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (actor_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT Triggers: last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE FUNCTION last_updated()
O comando também retorna índices, restrições, regras e gatilhos associados. Além disso, para tabelas externas, o servidor externo associado é mostrado.
Informações estendidas
Podemos anexar um sinal de mais (
+
) para revelar informações estendidas, que incluem quaisquer comentários associados às colunas da tabela, a presença de OIDs na tabela, a definição de exibição se a relação for uma exibição e uma configuração de identidade de réplica não padrão e o nome do método de acesso se a relação tem um método de acesso. Exemplo:
\d+ public.actor
Resultado:
Table "public.actor" +-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+ | Column | Type | Collation | Nullable | Default | Storage | Stats target | Description | +-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+ | actor_id | integer | | not null | nextval('actor_actor_id_seq'::regclass) | plain | | | | first_name | character varying(45) | | not null | | extended | | | | last_name | character varying(45) | | not null | | extended | | | | last_update | timestamp without time zone | | not null | now() | plain | | | +-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+ Indexes: "actor_pkey" PRIMARY KEY, btree (actor_id) "idx_actor_last_name" btree (last_name) Referenced by: TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (actor_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT Triggers: last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE FUNCTION last_updated() Access method: heap
Retornar apenas tipos de objetos específicos
Conforme mencionado, if
\d
é usado sem um pattern
argumento, é equivalente a \dtvmsE
que mostrará uma lista de todas as tabelas visíveis, visualizações, visualizações materializadas, sequências e tabelas estrangeiras. Podemos anexar qualquer uma das letras
E
, i
, m
, s
, t
e v
, que significa tabela estrangeira, índice, visão materializada, sequência, tabela e visão, respectivamente. Podemos especificar qualquer uma ou todas essas letras, em qualquer ordem, para obter uma listagem de objetos desses tipos. Aqui está um exemplo de anexação de
t
para limitar os dados retornados a apenas tabelas:\dt actor
Resultado:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Coringas
Aqui está um exemplo de inclusão de um operador curinga, para que todas as tabelas que começam com
film
são devolvidos:\dt film*
Resultado:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
O information_schema.columns
Visualizar
Se você não estiver usando o
psql
(e mesmo se você está usando psql
), então você sempre pode consultar o information_schema.columns
visualizar. Essa visualização pode ser usada para retornar informações semelhantes às que obteríamos com DESCRIBE table
em outros SGBDs. SELECT
column_name,
data_type,
character_maximum_length AS max_length,
character_octet_length AS octet_length,
is_nullable,
column_default
FROM
information_schema.columns
WHERE
table_schema = 'public' AND
table_name = 'actor';
Resultado:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | column_name | data_type | max_length | octet_length | is_nullable | column_default | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | actor_id | integer | NULL | NULL | NO | nextval('actor_actor_id_seq'::regclass) | | first_name | character varying | 45 | 180 | NO | NULL | | last_name | character varying | 45 | 180 | NO | NULL | | last_update | timestamp without time zone | NULL | NULL | NO | now() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Essa exibição contém muito mais colunas e você pode adicionar/remover colunas conforme necessário.
O
information_schema
views são praticamente padrão na maioria dos principais DBMSs e, portanto, podemos consultar essa view nesses DBMSs também.