Niektóre DBMS, takie jak Oracle, MySQL i MariaDB, mają DESCRIBE
polecenie, które zwraca informacje o tabelach i widokach. To idzie DESCRIBE table
gdzie tabela jest nazwą tabeli lub widoku, po której może również następować nazwa kolumny, jeśli chcesz uzyskać informacje tylko o określonej kolumnie.
PostgreSQL nie ma DESCRIBE TABLE
polecenie jako takie, ale istnieją alternatywy.
\d
Polecenie
Jeśli używasz psql
, szybkim sposobem na zwrócenie informacji o tabeli jest \d
Komenda. To polecenie wyświetla informacje o tabelach, widokach, widokach zmaterializowanych, indeksie, sekwencjach lub tabelach obcych. Dlatego możemy użyć tego polecenia jako DESCRIBE TABLE
alternatywa.
Składnia
Składnia wygląda tak:
\d[S+] [ pattern ]
Tutaj, pattern
może być nazwą tabeli (lub innego obiektu) lub może być wyrażeniem regularnym. Jeśli \d
jest używany bez pattern
argument, jest to odpowiednik \dtvmsE
który pokaże listę wszystkich widocznych tabel, widoków, widoków zmaterializowanych, sekwencji i tabel obcych.
Domyślnie wyświetlane są tylko obiekty utworzone przez użytkownika, ale możesz podać wzorzec lub S
modyfikator, aby uwzględnić obiekty systemowe.
Przykład
Oto przykład użycia \d
aby zwrócić informacje o tabeli o nazwie actor
:
\d public.actor
Wynik:
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()
Polecenie zwraca również powiązane indeksy, ograniczenia, reguły i wyzwalacze. Również w przypadku tabel obcych wyświetlany jest powiązany serwer zagraniczny.
Informacje rozszerzone
Możemy dodać znak plus (+
) w celu ujawnienia rozszerzonych informacji, które obejmują wszelkie komentarze związane z kolumnami tabeli, obecność identyfikatorów OID w tabeli, definicję widoku, jeśli relacja jest widokiem, oraz niestandardowe ustawienie tożsamości repliki i nazwę metody dostępu, jeśli relacja ma metodę dostępu.
Przykład:
\d+ public.actor
Wynik:
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
Zwróć tylko określone typy obiektów
Jak wspomniano, if \d
jest używany bez pattern
argument, jest to odpowiednik \dtvmsE
który pokaże listę wszystkich widocznych tabel, widoków, widoków zmaterializowanych, sekwencji i tabel obcych.
Możemy dołączyć dowolną z liter E
, i
, m
, s
, t
i v
, które oznaczają odpowiednio tabelę obcą, indeks, widok zmaterializowany, sekwencję, tabelę i widok. Możemy określić dowolną lub wszystkie z tych liter w dowolnej kolejności, aby uzyskać listę obiektów tego typu.
Oto przykład dodawania t
aby ograniczyć zwracane dane tylko do tabel:
\dt actor
Wynik:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Dzikie karty
Oto przykład włączenia operatora z symbolem wieloznacznym, dzięki któremu wszystkie tabele zaczynające się od film
są zwracane:
\dt film*
Wynik:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
Kolumny information_schema.columns
Zobacz
Jeśli nie używasz psql
(a nawet jeśli jesteś) przy użyciu psql
), wtedy zawsze możesz wysłać zapytanie do information_schema.columns
pogląd. Ten widok może służyć do zwracania informacji podobnych do tych, które otrzymalibyśmy za pomocą DESCRIBE table
w innych 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';
Wynik:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ | 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() | +-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
Ten widok zawiera znacznie więcej kolumn i możesz dodawać/usuwać kolumny zgodnie z wymaganiami.
information_schema
widoki są dość standardowe w większości głównych DBMS, więc możemy odpytywać ten widok również w tych DBMS.