PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL DESCRIVERE TABELLA Equivalente

Alcuni DBMS come Oracle, MySQL e MariaDB hanno un DESCRIBE comando che restituisce informazioni su tabelle e viste. Va DESCRIBE table dove tabella è il nome della tabella o della vista e può anche essere seguito dal nome di una colonna se desideri solo informazioni su una colonna specifica.

PostgreSQL non ha un DESCRIBE TABLE comando in quanto tale, ma ci sono delle alternative.

Il \d Comando

Se stai usando psql , un modo rapido per restituire le informazioni sulla tabella è con \d comando. Questo comando mostra informazioni su tabelle, viste, viste materializzate, indici, sequenze o tabelle esterne. Possiamo quindi usare questo comando come DESCRIBE TABLE alternativa.

Sintassi

La sintassi è questa:

\d[S+] [ pattern ]

Qui, pattern potrebbe essere il nome della tabella (o di un altro oggetto) o potrebbe essere un'espressione regolare. Se \d viene utilizzato senza un pattern argomento, è equivalente a \dtvmsE che mostrerà un elenco di tutte le tabelle visibili, viste, viste materializzate, sequenze e tabelle esterne.

Per impostazione predefinita, vengono mostrati solo gli oggetti creati dall'utente, ma puoi fornire un modello o la S modificatore per includere oggetti di sistema.

Esempio

Ecco un esempio di utilizzo di \d per restituire informazioni su una tabella chiamata actor :

\d public.actor

Risultato:

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

Il comando restituisce anche indici, vincoli, regole e trigger associati. Inoltre, per le tabelle esterne, viene mostrato il server esterno associato.

Informazioni estese

Possiamo aggiungere un segno più (+ ) per rivelare informazioni estese, che includono eventuali commenti associati alle colonne della tabella, la presenza di OID nella tabella, la definizione della vista se la relazione è una vista e un'impostazione dell'identità della replica non predefinita e il nome del metodo di accesso se la relazione ha un metodo di accesso.

Esempio:

\d+ public.actor

Risultato:

                                                                 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

Restituisci solo tipi di oggetti specifici

Come accennato, if \d viene utilizzato senza un pattern argomento, è equivalente a \dtvmsE che mostrerà un elenco di tutte le tabelle visibili, viste, viste materializzate, sequenze e tabelle esterne.

Possiamo aggiungere una qualsiasi delle lettere E , i , m , s , t e v , che stanno rispettivamente per tabella esterna, indice, vista materializzata, sequenza, tabella e vista. Possiamo specificare una o tutte queste lettere, in qualsiasi ordine, per ottenere un elenco di oggetti di questo tipo.

Ecco un esempio di aggiunta di t per limitare i dati restituiti alle sole tabelle:

\dt actor

Risultato:

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

Caratteri jolly

Ecco un esempio di inclusione di un operatore con caratteri jolly, in modo che tutte le tabelle che iniziano con film vengono restituiti:

\dt film*

Risultato:

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

Il information_schema.columns Visualizza

Se non stai usando psql (e anche se lo sei usando psql ), quindi puoi sempre interrogare information_schema.columns Visualizza. Questa visualizzazione può essere utilizzata per restituire informazioni simili a quelle che otterremmo con DESCRIBE table in altri 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';

Risultato:

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

Questa vista contiene molte più colonne ed è possibile aggiungere/rimuovere colonne secondo necessità.

Lo information_schema le viste sono praticamente standard nella maggior parte dei principali DBMS, quindi possiamo interrogare questa vista anche in quei DBMS.