我能够做大部分我能做的事,但不是全部。
如果我有:
\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并获取适用于列的列?
答案 0 :(得分:5)
psql
has a -E
option:
-E
--echo-hidden
回显
\d
和其他反斜杠命令生成的实际查询。您可以使用它来研究psql的内部操作。这等效于将变量ECHO_HIDDEN
设置为on。
因此,如果您运行psql -E
并执行\d+ myschema.mytable
,则应该确切看到内部执行了哪些SQL查询。