Některé DBMS jako Oracle, MySQL a MariaDB mají DESCRIBE
příkaz, který vrací informace o tabulkách a pohledech. Jde DESCRIBE table
kde tabulka je název tabulky nebo pohledu a může být také následován názvem sloupce, pokud chcete pouze informace o konkrétním sloupci.
PostgreSQL nemá DESCRIBE TABLE
příkaz jako takový, ale existují alternativy.
\d
Příkaz
Pokud používáte psql
, rychlý způsob, jak vrátit informace o tabulce, je pomocí \d
příkaz. Tento příkaz zobrazuje informace o tabulkách, pohledech, materializovaných pohledech, indexu, sekvencích nebo cizích tabulkách. Můžeme tedy tento příkaz použít jako DESCRIBE TABLE
alternativa.
Syntaxe
Syntaxe vypadá takto:
\d[S+] [ pattern ]
Zde pattern
může to být název tabulky (nebo jiného objektu) nebo to může být regulární výraz. Pokud \d
se používá bez pattern
argument, je ekvivalentní \dtvmsE
který zobrazí seznam všech viditelných tabulek, pohledů, materializovaných pohledů, sekvencí a cizích tabulek.
Ve výchozím nastavení se zobrazují pouze objekty vytvořené uživatelem, ale můžete zadat vzor nebo S
modifikátor pro zahrnutí systémových objektů.
Příklad
Zde je příklad použití \d
vrátit informace o tabulce s názvem actor
:
\d public.actor
Výsledek:
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()
Příkaz také vrátí související indexy, omezení, pravidla a spouštěče. U cizích tabulek je také zobrazen přidružený cizí server.
Rozšířené informace
Můžeme připojit znaménko plus (+
) odhalit rozšířené informace, které zahrnují jakékoli komentáře spojené se sloupci tabulky, přítomnost OID v tabulce, definici pohledu, pokud je vztah pohledem, a nevýchozí nastavení identity repliky a název přístupové metody, pokud vztah má přístupovou metodu.
Příklad:
\d+ public.actor
Výsledek:
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
Vrátí pouze specifické typy objektů
Jak již bylo zmíněno, if \d
se používá bez pattern
argument, je ekvivalentní \dtvmsE
který zobrazí seznam všech viditelných tabulek, pohledů, materializovaných pohledů, sekvencí a cizích tabulek.
Můžeme připojit libovolné z písmen E
, i
, m
, s
, t
a v
, což znamená cizí tabulka, index, materializovaný pohled, sekvence, tabulka a pohled. Můžeme zadat některá nebo všechna tato písmena v libovolném pořadí, abychom získali seznam objektů těchto typů.
Zde je příklad připojení t
pro omezení vracených dat pouze na tabulky:
\dt actor
Výsledek:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Zástupné znaky
Zde je příklad zahrnutí zástupného operátoru, aby všechny tabulky začínající film
jsou vráceny:
\dt film*
Výsledek:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
information_schema.columns
Zobrazit
Pokud nepoužíváte psql
(a i když jste pomocí psql
), pak se můžete vždy dotazovat na information_schema.columns
Pohled. Toto zobrazení lze použít k vrácení informací podobných těm, které bychom získali pomocí DESCRIBE table
v jiných 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';
Výsledek:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | 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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Toto zobrazení obsahuje mnohem více sloupců a podle potřeby můžete přidávat/odebírat sloupce.
information_schema
pohledy jsou ve většině hlavních DBMS do značné míry standardní, a tak se na tento pohled můžeme dotazovat i v těchto DBMS.