sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL DESCRIBE TABLE Equivalente

Algunos DBMS como Oracle, MySQL y MariaDB tienen un DESCRIBE Comando que devuelve información sobre tablas y vistas. Va DESCRIBE table donde tabla es el nombre de la tabla o vista, y también puede ir seguido de un nombre de columna si solo desea información sobre una columna específica.

PostgreSQL no tiene una DESCRIBE TABLE comando como tal, pero hay alternativas.

El \d Comando

Si está utilizando psql , una forma rápida de devolver la información de la tabla es con \d dominio. Este comando muestra información sobre tablas, vistas, vistas materializadas, índice, secuencias o tablas foráneas. Por lo tanto, podemos usar este comando como DESCRIBE TABLE alternativa.

Sintaxis

La sintaxis es así:

\d[S+] [ pattern ]

Aquí, pattern podría ser el nombre de la tabla (u otro objeto) o podría ser una expresión regular. Si \d se usa sin un pattern argumento, es equivalente a \dtvmsE que mostrará una lista de todas las tablas visibles, vistas, vistas materializadas, secuencias y tablas foráneas.

De forma predeterminada, solo se muestran los objetos creados por el usuario, pero puede proporcionar un patrón o la S modificador para incluir objetos del sistema.

Ejemplo

Aquí hay un ejemplo del uso de \d para devolver información sobre una tabla llamada 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()

El comando también devuelve índices, restricciones, reglas y activadores asociados. Además, para las tablas externas, se muestra el servidor externo asociado.

Información ampliada

Podemos añadir un signo más (+ ) para revelar información ampliada, que incluye cualquier comentario asociado con las columnas de la tabla, la presencia de OID en la tabla, la definición de vista si la relación es una vista y una configuración de identidad de réplica no predeterminada y el nombre del método de acceso si la relación tiene un método de acceso.

Ejemplo:

\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

Devolver solo tipos de objetos específicos

Como se mencionó, if \d se usa sin un pattern argumento, es equivalente a \dtvmsE que mostrará una lista de todas las tablas visibles, vistas, vistas materializadas, secuencias y tablas foráneas.

Podemos añadir cualquiera de las letras E , i , m , s , t y v , que significan tabla externa, índice, vista materializada, secuencia, tabla y vista, respectivamente. Podemos especificar cualquiera o todas estas letras, en cualquier orden, para obtener una lista de objetos de este tipo.

Aquí hay un ejemplo de agregar t para limitar los datos devueltos solo a las tablas:

\dt actor

Resultado:

          List of relations
+--------+-------+-------+----------+
| Schema | Name  | Type  |  Owner   |
+--------+-------+-------+----------+
| public | actor | table | postgres |
+--------+-------+-------+----------+

Comodines

Aquí hay un ejemplo de cómo incluir un operador comodín, de modo que todas las tablas que comienzan con film se devuelven:

\dt film*

Resultado:

              List of relations
+--------+---------------+-------+----------+
| Schema |     Name      | Type  |  Owner   |
+--------+---------------+-------+----------+
| public | film          | table | postgres |
| public | film_actor    | table | postgres |
| public | film_category | table | postgres |
+--------+---------------+-------+----------+

El information_schema.columns Ver

Si no está utilizando psql (e incluso si eres usando psql ), entonces siempre puede consultar el information_schema.columns vista. Esta vista se puede usar para devolver información similar a la que obtendríamos con DESCRIBE table en otros DBMS.

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()                                   |
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+

Esta vista contiene muchas más columnas y puede agregar o quitar columnas según sea necesario.

El information_schema Las vistas son bastante estándar en la mayoría de los DBMS principales, por lo que también podemos consultar esta vista en esos DBMS.