Vissa DBMS som Oracle, MySQL och MariaDB har en DESCRIBE
kommando som returnerar information om tabeller och vyer. Det går till DESCRIBE table
där tabell är namnet på tabellen eller vyn, och den kan också följas av ett kolumnnamn om du bara vill ha information om en specifik kolumn.
PostgreSQL har ingen DESCRIBE TABLE
kommandot som sådant, men det finns alternativ.
\d
Kommando
Om du använder psql
, ett snabbt sätt att returnera tabellinformation är med \d
kommando. Detta kommando visar information om tabeller, vyer, materialiserade vyer, index, sekvenser eller främmande tabeller. Vi kan därför använda detta kommando som en DESCRIBE TABLE
alternativ.
Syntax
Syntaxen ser ut så här:
\d[S+] [ pattern ]
Här, pattern
kan vara namnet på tabellen (eller annat objekt) eller det kan vara ett reguljärt uttryck. Om \d
används utan ett pattern
argument, är det ekvivalent med \dtvmsE
som visar en lista över alla synliga tabeller, vyer, materialiserade vyer, sekvenser och främmande tabeller.
Som standard visas endast användarskapade objekt, men du kan ange ett mönster eller S
modifierare för att inkludera systemobjekt.
Exempel
Här är ett exempel på hur du använder \d
för att returnera information om en tabell som heter 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()
Kommandot returnerar också associerade index, begränsningar, regler och utlösare. För främmande tabeller visas också den associerade främmande servern.
Utökad information
Vi kan lägga till ett plustecken (+
) för att avslöja utökad information, som inkluderar eventuella kommentarer associerade med tabellens kolumner, närvaron av OID i tabellen, vydefinitionen om relationen är en vy och en icke-standardinställning för replikidentitet och åtkomstmetodens namn om relationen har en åtkomstmetod.
Exempel:
\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
Returnera endast specifika objekttyper
Som nämnts, if \d
används utan ett pattern
argument, är det ekvivalent med \dtvmsE
som visar en lista över alla synliga tabeller, vyer, materialiserade vyer, sekvenser och främmande tabeller.
Vi kan lägga till vilken som helst av bokstäverna E
, i
, m
, s
, t
och v
, som står för främmande tabell, index, materialiserad vy, sekvens, tabell respektive vy. Vi kan specificera någon eller alla av dessa bokstäver, i valfri ordning, för att få en lista över objekt av dessa typer.
Här är ett exempel på att lägga till t
för att begränsa data som returneras till bara tabeller:
\dt actor
Resultat:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Jokertecken
Här är ett exempel på att inkludera en jokerteckenoperator, så att alla tabeller som börjar med film
returneras:
\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
Visa
Om du inte använder psql
(och även om du är med psql
), så kan du alltid fråga information_schema.columns
se. Denna vy kan användas för att returnera liknande information till vad vi skulle få med DESCRIBE table
i andra 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';
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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Den här vyn innehåller många fler kolumner, och du kan lägga till/ta bort kolumner efter behov.
information_schema
vyer är i stort sett standard i de flesta av de stora DBMS:erna, så vi kan fråga efter den här vyn i dessa DBMS:er också.