Я видел несколько примеров, таких как здесь или здесь
и я могу сделать большую часть того, что могу, но не все.
если у меня есть:
\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 и получить индекс столбцов, к которому применяется индекс?