Nogle DBMS'er såsom Oracle, MySQL og MariaDB har en DESCRIBE
kommando, der returnerer information om tabeller og visninger. Det går til DESCRIBE table
hvor tabel er navnet på tabellen eller visningen, og den kan også efterfølges af et kolonnenavn, hvis du kun ønsker information om en bestemt kolonne.
PostgreSQL har ikke en DESCRIBE TABLE
kommandoen som sådan, men der er alternativer.
\d
Kommando
Hvis du bruger psql
, en hurtig måde at returnere tabeloplysninger på er med \d
kommando. Denne kommando viser information om tabeller, visninger, materialiserede visninger, indeks, sekvenser eller fremmede tabeller. Vi kan derfor bruge denne kommando som en DESCRIBE TABLE
alternativ.
Syntaks
Syntaksen ser sådan ud:
\d[S+] [ pattern ]
Her, pattern
kunne være navnet på tabellen (eller et andet objekt), eller det kunne være et regulært udtryk. Hvis \d
bruges uden et pattern
argument, svarer det til \dtvmsE
som vil vise en liste over alle synlige tabeller, visninger, materialiserede visninger, sekvenser og fremmede tabeller.
Som standard vises kun brugeroprettede objekter, men du kan angive et mønster eller S
modifikator til at inkludere systemobjekter.
Eksempel
Her er et eksempel på brug af \d
for at returnere information om en tabel kaldet actor
:
\d public.actor
Resultat:
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()
Kommandoen returnerer også tilknyttede indekser, begrænsninger, regler og udløsere. Også for udenlandske tabeller vises den tilknyttede udenlandske server.
Udvidet info
Vi kan tilføje et plustegn (+
) for at afsløre udvidet information, som inkluderer eventuelle kommentarer, der er knyttet til tabellens kolonner, tilstedeværelsen af OID'er i tabellen, visningsdefinitionen, hvis relationen er en visning, og en ikke-standard replika identitetsindstilling og adgangsmetodenavnet, hvis relationen har en adgangsmetode.
Eksempel:
\d+ public.actor
Resultat:
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
Returnering kun specifikke objekttyper
Som nævnt, if \d
bruges uden et pattern
argument, svarer det til \dtvmsE
som vil vise en liste over alle synlige tabeller, visninger, materialiserede visninger, sekvenser og fremmede tabeller.
Vi kan tilføje et hvilket som helst af bogstaverne E
, i
, m
, s
, t
og v
, som står for henholdsvis fremmed tabel, indeks, materialiseret visning, sekvens, tabel og visning. Vi kan angive et hvilket som helst af eller alle disse bogstaver, i en hvilken som helst rækkefølge, for at få en liste over objekter af disse typer.
Her er et eksempel på tilføjelse af t
for at begrænse de returnerede data til kun tabeller:
\dt actor
Resultat:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Jokertegn
Her er et eksempel på at inkludere en jokertegnoperator, så alle tabeller, der starter med film
returneres:
\dt film*
Resultat:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
information_schema.columns
Vis
Hvis du ikke bruger psql
(og selvom du er ved hjælp af psql
), så kan du altid forespørge på information_schema.columns
udsigt. Denne visning kan bruges til at returnere lignende oplysninger, som vi ville få med DESCRIBE table
i andre DBMS'er.
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';
Resultat:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | 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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Denne visning indeholder mange flere kolonner, og du kan tilføje/fjerne kolonner efter behov.
information_schema
visninger er stort set standard på tværs af de fleste af de store DBMS'er, og så vi kan også forespørge på denne visning i disse DBMS'er.