PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL DESCRIBE TABLE Equivalente


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.