Някои СУБД като 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
изгледите са почти стандартни за повечето от основните СУБД и така можем да потърсим този изглед и в тези СУБД.