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.