PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL DESCRIBE TABLE-Äquivalent

Einige DBMS wie Oracle, MySQL und MariaDB haben einen DESCRIBE Befehl, der Informationen zu Tabellen und Ansichten zurückgibt. Es geht um DESCRIBE table Dabei ist Tabelle der Name der Tabelle oder Ansicht und kann auch von einem Spaltennamen gefolgt werden, wenn Sie nur Informationen zu einer bestimmten Spalte wünschen.

PostgreSQL hat keine DESCRIBE TABLE Befehl als solches, aber es gibt Alternativen.

Der \d Befehl

Wenn Sie psql verwenden , eine schnelle Möglichkeit, Tabelleninformationen zurückzugeben, ist der \d Befehl. Dieser Befehl zeigt Informationen über Tabellen, Ansichten, materialisierte Ansichten, Indizes, Sequenzen oder Fremdtabellen an. Wir können diesen Befehl daher als DESCRIBE TABLE verwenden Alternative.

Syntax

Die Syntax lautet wie folgt:

\d[S+] [ pattern ]

Hier, pattern könnte der Name der Tabelle (oder eines anderen Objekts) oder ein regulärer Ausdruck sein. Wenn \d wird ohne ein pattern verwendet Argument, es entspricht \dtvmsE die eine Liste aller sichtbaren Tabellen, Ansichten, materialisierten Ansichten, Sequenzen und fremden Tabellen anzeigt.

Standardmäßig werden nur vom Benutzer erstellte Objekte angezeigt, aber Sie können ein Muster oder das S angeben Modifikator zum Einschließen von Systemobjekten.

Beispiel

Hier ist ein Beispiel für die Verwendung von \d um Informationen über eine Tabelle namens actor zurückzugeben :

\d public.actor

Ergebnis:

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

Der Befehl gibt auch zugehörige Indizes, Einschränkungen, Regeln und Trigger zurück. Außerdem wird bei fremden Tabellen der zugehörige fremde Server angezeigt.

Erweiterte Informationen

Wir können ein Pluszeichen anhängen (+ ), um erweiterte Informationen anzuzeigen, die alle Kommentare enthalten, die den Spalten der Tabelle zugeordnet sind, das Vorhandensein von OIDs in der Tabelle, die Ansichtsdefinition, wenn die Beziehung eine Ansicht ist, und eine nicht standardmäßige Replikatidentitätseinstellung und den Zugriffsmethodennamen, wenn die Relation hat eine Zugriffsmethode.

Beispiel:

\d+ public.actor

Ergebnis:

                                                                 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

Nur bestimmte Objekttypen zurückgeben

Wie bereits erwähnt, if \d wird ohne ein pattern verwendet Argument, es entspricht \dtvmsE die eine Liste aller sichtbaren Tabellen, Ansichten, materialisierten Ansichten, Sequenzen und fremden Tabellen anzeigt.

Wir können jeden der Buchstaben E anhängen , i , m , s , t , und v , die jeweils für Foreign Table, Index, Materialized View, Sequence, Table und View stehen. Wir können einen oder alle dieser Buchstaben in beliebiger Reihenfolge angeben, um eine Auflistung von Objekten dieser Art zu erhalten.

Hier ist ein Beispiel für das Anhängen von t um die zurückgegebenen Daten auf Tabellen zu beschränken:

\dt actor

Ergebnis:

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

Platzhalter

Hier ist ein Beispiel für das Einfügen eines Platzhalteroperators, sodass alle Tabellen, die mit film beginnen, angezeigt werden zurückgegeben:

\dt film*

Ergebnis:

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

Die information_schema.columns Anzeigen

Wenn Sie psql nicht verwenden (und selbst wenn Sie es sind mit psql ), dann können Sie immer die information_schema.columns abfragen Aussicht. Diese Ansicht kann verwendet werden, um ähnliche Informationen wie mit DESCRIBE table in anderen 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';

Ergebnis:

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

Diese Ansicht enthält viele weitere Spalten, und Sie können Spalten nach Bedarf hinzufügen/entfernen.

Das information_schema Ansichten sind in den meisten großen DBMSs so ziemlich Standard, und daher können wir diese Ansicht auch in diesen DBMSs abfragen.