PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL DESCRIBE TABLE Équivalent

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.