Sommige DBMS'en zoals Oracle, MySQL en MariaDB hebben een DESCRIBE
commando dat informatie over tabellen en views retourneert. Het gaat DESCRIBE table
waarbij tabel de naam is van de tabel of weergave, en deze kan ook worden gevolgd door een kolomnaam als u alleen informatie over een specifieke kolom wilt.
PostgreSQL heeft geen DESCRIBE TABLE
commando als zodanig, maar er zijn alternatieven.
De \d
Commando
Als u psql
. gebruikt , een snelle manier om tabelinformatie terug te geven is met de \d
opdracht. Deze opdracht toont informatie over tabellen, weergaven, gerealiseerde weergaven, index, reeksen of vreemde tabellen. We kunnen dit commando daarom gebruiken als een DESCRIBE TABLE
alternatief.
Syntaxis
De syntaxis gaat als volgt:
\d[S+] [ pattern ]
Hier, pattern
kan de naam zijn van de tabel (of een ander object) of het kan een reguliere expressie zijn. Als \d
wordt gebruikt zonder een pattern
argument, het is gelijk aan \dtvmsE
die een lijst toont van alle zichtbare tabellen, weergaven, gematerialiseerde weergaven, reeksen en vreemde tabellen.
Standaard worden alleen door de gebruiker gemaakte objecten getoond, maar u kunt een patroon of de S
. opgeven modifier om systeemobjecten op te nemen.
Voorbeeld
Hier is een voorbeeld van het gebruik van \d
om informatie terug te geven over een tabel met de naam actor
:
\d public.actor
Resultaat:
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()
De opdracht retourneert ook bijbehorende indexen, beperkingen, regels en triggers. Ook wordt voor buitenlandse tafels de bijbehorende buitenlandse server getoond.
Uitgebreide info
We kunnen een plusteken toevoegen (+
) om uitgebreide informatie te onthullen, inclusief eventuele opmerkingen die zijn gekoppeld aan de kolommen van de tabel, de aanwezigheid van OID's in de tabel, de weergavedefinitie als de relatie een weergave is, en een niet-standaard replica-identiteitsinstelling en de naam van de toegangsmethode als de relatie heeft een toegangsmethode.
Voorbeeld:
\d+ public.actor
Resultaat:
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
Alleen specifieke objecttypen retourneren
Zoals vermeld, if \d
wordt gebruikt zonder een pattern
argument, het is gelijk aan \dtvmsE
die een lijst toont van alle zichtbare tabellen, weergaven, gematerialiseerde weergaven, reeksen en vreemde tabellen.
We kunnen elk van de letters E
. toevoegen , i
, m
, s
, t
, en v
, die respectievelijk staan voor vreemde tabel, index, gematerialiseerde weergave, volgorde, tabel en weergave. We kunnen een of al deze letters specificeren, in willekeurige volgorde, om een lijst van objecten van dit type te krijgen.
Hier is een voorbeeld van het toevoegen van t
om de geretourneerde gegevens te beperken tot alleen tabellen:
\dt actor
Resultaat:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Wildcards
Hier is een voorbeeld van het opnemen van een wildcard-operator, zodat alle tabellen die beginnen met film
worden geretourneerd:
\dt film*
Resultaat:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
De information_schema.columns
Bekijk
Als u psql
. niet gebruikt (en zelfs als je bent met behulp van psql
), dan kunt u altijd de information_schema.columns
. opvragen weergave. Deze weergave kan worden gebruikt om soortgelijke informatie terug te geven als wat we zouden krijgen met DESCRIBE table
in andere DBMS'en.
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';
Resultaat:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | 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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Deze weergave bevat veel meer kolommen en u kunt desgewenst kolommen toevoegen/verwijderen.
Het information_schema
weergaven zijn vrijwel standaard voor de meeste grote DBMS'en, en dus kunnen we deze weergave ook in die DBMS'en opvragen.