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.