Certains SGBD tels qu'Oracle, MySQL et MariaDB ont un DESCRIBE
commande qui renvoie des informations sur les tables et les vues. Il va DESCRIBE table
où table est le nom de la table ou de la vue, et il peut également être suivi d'un nom de colonne si vous souhaitez uniquement des informations sur une colonne spécifique.
PostgreSQL n'a pas de DESCRIBE TABLE
commande en tant que telle, mais il existe des alternatives.
Le \d
Commande
Si vous utilisez psql
, un moyen rapide de retourner les informations de table est avec le \d
commande. Cette commande affiche des informations sur les tables, les vues, les vues matérialisées, l'index, les séquences ou les tables étrangères. On peut donc utiliser cette commande comme une DESCRIBE TABLE
alternative.
Syntaxe
La syntaxe ressemble à ceci :
\d[S+] [ pattern ]
Ici, pattern
peut être le nom de la table (ou d'un autre objet) ou une expression régulière. Si \d
est utilisé sans pattern
argument, il est équivalent à \dtvmsE
qui affichera une liste de toutes les tables, vues, vues matérialisées, séquences et tables étrangères visibles.
Par défaut, seuls les objets créés par l'utilisateur sont affichés, mais vous pouvez fournir un modèle ou le S
modificateur pour inclure les objets système.
Exemple
Voici un exemple d'utilisation de \d
pour retourner des informations sur une table appelée actor
:
\d public.actor
Résultat :
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()
La commande renvoie également les index, les contraintes, les règles et les déclencheurs associés. De plus, pour les tables étrangères, le serveur étranger associé est affiché.
Informations détaillées
Nous pouvons ajouter un signe plus (+
) pour révéler des informations étendues, qui incluent tous les commentaires associés aux colonnes de la table, la présence d'OID dans la table, la définition de la vue si la relation est une vue, et un paramètre d'identité de réplique non par défaut et le nom de la méthode d'accès si la relation a une méthode d'accès.
Exemple :
\d+ public.actor
Résultat :
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
Renvoyer uniquement des types d'objets spécifiques
Comme mentionné, jef \d
est utilisé sans pattern
argument, il est équivalent à \dtvmsE
qui affichera une liste de toutes les tables, vues, vues matérialisées, séquences et tables étrangères visibles.
Nous pouvons ajouter n'importe laquelle des lettres E
, i
, m
, s
, t
, et v
, qui représentent respectivement une table étrangère, un index, une vue matérialisée, une séquence, une table et une vue. Nous pouvons spécifier une ou toutes ces lettres, dans n'importe quel ordre, pour obtenir une liste d'objets de ces types.
Voici un exemple d'ajout de t
pour limiter les données renvoyées aux seules tables :
\dt actor
Résultat :
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Jokers
Voici un exemple d'inclusion d'un opérateur générique, de sorte que toutes les tables commençant par film
sont renvoyés :
\dt film*
Résultat :
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
Les information_schema.columns
Afficher
Si vous n'utilisez pas psql
(et même si vous êtes en utilisant psql
), alors vous pouvez toujours interroger le information_schema.columns
voir. Cette vue peut être utilisée pour renvoyer des informations similaires à ce que nous obtiendrions avec DESCRIBE table
dans d'autres SGBD.
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';
Résultat :
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | 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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Cette vue contient beaucoup plus de colonnes et vous pouvez ajouter/supprimer des colonnes selon vos besoins.
Le information_schema
les vues sont à peu près standard dans la plupart des principaux SGBD, et nous pouvons donc également interroger cette vue dans ces SGBD.