Някои СУБД като Oracle, MySQL и MariaDB имат DESCRIBE команда, която връща информация за таблици и изгледи. Отива DESCRIBE table където таблицата е името на таблицата или изгледа и може да бъде последвано от име на колона, ако искате информация само за конкретна колона.
PostgreSQL няма DESCRIBE TABLE команда като такава, но има алтернативи.
\d Команда
Ако използвате psql , бърз начин за връщане на информация за таблицата е с \d команда. Тази команда показва информация за таблици, изгледи, материализирани изгледи, индекс, поредици или чужди таблици. Следователно можем да използваме тази команда като DESCRIBE TABLE алтернатива.
Синтаксис
Синтаксисът е така:
\d[S+] [ pattern ]
Тук, pattern може да бъде името на таблицата (или друг обект) или може да е регулярен израз. Ако \d се използва без pattern аргумент, той е еквивалентен на \dtvmsE който ще покаже списък с всички видими таблици, изгледи, материализирани изгледи, последователности и чужди таблици.
По подразбиране се показват само създадени от потребителя обекти, но можете да предоставите шаблон или S модификатор за включване на системни обекти.
Пример
Ето пример за използване на \d за да върне информация за таблица, наречена actor :
\d public.actor Резултат:
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() Командата също така връща свързани индекси, ограничения, правила и тригери. Също така за чужди таблици се показва асоциираният чужд сървър.
Разширена информация
Можем да добавим знак плюс (+ ) за разкриване на разширена информация, която включва всички коментари, свързани с колоните на таблицата, наличието на OID в таблицата, дефиницията на изгледа, ако връзката е изглед, и настройка за идентичност на репликата, която не е по подразбиране, и името на метода за достъп, ако релацията има метод за достъп.
Пример:
\d+ public.actor Резултат:
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 Връщане само на конкретни типове обекти
Както споменахме, if \d се използва без pattern аргумент, той е еквивалентен на \dtvmsE който ще покаже списък с всички видими таблици, изгледи, материализирани изгледи, последователности и чужди таблици.
Можем да добавим всяка от буквите E , i , m , s , t и v , които означават чужда таблица, индекс, материализиран изглед, последователност, таблица и изглед, съответно. Можем да посочим някоя или всички от тези букви в произволен ред, за да получим списък с обекти от тези типове.
Ето пример за добавяне на t за да ограничите върнатите данни само до таблици:
\dt actor Резултат:
List of relations +--------+-------+-------+----------+ | Schema | Name | Type | Owner | +--------+-------+-------+----------+ | public | actor | table | postgres | +--------+-------+-------+----------+
Заместващи знаци
Ето пример за включване на оператор за заместващ знак, така че всички таблици, които започват с film се връщат:
\dt film* Резултат:
List of relations +--------+---------------+-------+----------+ | Schema | Name | Type | Owner | +--------+---------------+-------+----------+ | public | film | table | postgres | | public | film_actor | table | postgres | | public | film_category | table | postgres | +--------+---------------+-------+----------+
information_schema.columns Преглед
Ако не използвате psql (и дори ако сте използвайки psql ), тогава винаги можете да направите заявка за information_schema.columns изглед. Този изглед може да се използва за връщане на информация, подобна на това, което бихме получили с DESCRIBE table в други СУБД.
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'; Резултат:
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
| 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() |
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+ Този изглед съдържа много повече колони и можете да добавяте/премахвате колони според нуждите.
information_schema изгледите са почти стандартни за повечето от основните СУБД и така можем да потърсим този изглед и в тези СУБД.