postgrePostgres\d+(显示关系信息)通过sql等价



我看到了几个类似于此处或此处的例子

我能做我能做的大部分,但不是全部。

如果我有:

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并获取索引所应用的列吗?

psql有一个-E选项:

-E
--echo-hidden

回显d和其他反斜杠命令生成的实际查询。您可以使用它来研究psql的内部操作。这相当于将变量ECHO_HIDDEN设置为打开。

因此,如果您运行psql -E并执行d+ myschema.mytable,您应该可以确切地看到内部执行了哪些SQL查询。

最新更新