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.