Postgres \ d + (показать информацию об отношениях) эквивалентно через sql - PullRequest
0 голосов
/ 04 ноября 2018

Я видел несколько примеров, таких как здесь или здесь

и я могу сделать большую часть того, что могу, но не все.

если у меня есть:

\d+ myschema.mytable

У меня есть все перечисленные столбцы и индексы. Формат для индекса, например:

Indexes:
    "id_pkey" PRIMARY KEY, btree (id,name,timestamp)
    "ix05_id" btree (name,company)

Мне удалось получить столбцы через sql, а для индексов и ключей я нашел некоторые sql из вышеприведенного поста, но не совсем для того, чтобы перенести в этот формат.

Итак, для ключей я смог сделать:

SELECT               
  pg_attribute.attname, 
  format_type(pg_attribute.atttypid, pg_attribute.atttypmod) 
FROM pg_index, pg_class, pg_attribute, pg_namespace 
WHERE 
  pg_class.oid = 'mytable'::regclass AND 
  indrelid = pg_class.oid AND 
  nspname = 'myschema' AND 
  pg_class.relnamespace = pg_namespace.oid AND 
  pg_attribute.attrelid = pg_class.oid AND 
  pg_attribute.attnum = any(pg_index.indkey)
 AND indisprimary

То есть этот столбец выбирает столбцы, к которым применяется ключ, но не имя индекса / ключа? Как я могу добавить это в приведенном выше запросе? К какой таблице мне нужно присоединиться?

Для индексов я смог сделать

SELECT * FROM pg_indexes WHERE tablename = 'mytable' AND schemaname = 'myschema' ;

Что выбирает индексы, но явно не перечисляет столбец, к которому они применяются - я вижу только indexdef, как они созданы? Могу ли я получить эту информацию, присоединившись к другим таблицам, или мне нужно проанализировать indexdef и получить индекс столбцов, к которому применяется индекс?

1 Ответ

0 голосов
/ 04 ноября 2018

psql имеет опцию -E :

-E
--echo-hidden

Отображает фактические запросы, сгенерированные \d и другими командами обратной косой черты. Вы можете использовать это для изучения внутренних операций PSQL. Это эквивалентно установке переменной ECHO_HIDDEN на.

Так что, если вы запустите psql -E и выполните \d+ myschema.mytable, вы должны точно увидеть, какие SQL-запросы выполняются внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...