Postgres \d+(显示关系信息)等效于 sql
Postgres \d+ (show relation information) equivalent via sql
我见过几个这样的例子 here or here
我能做我能做的大部分事情,但不是全部。
如果我有:
\d+ myschema.mytable
我列出了所有列和索引。索引的格式例如:
Indexes:
"id_pkey" PRIMARY KEY, btree (id,name,timestamp)
"ix05_id" btree (name,company)
我能够通过 sql 获取列,对于索引和键,我从上面 post 中找到了一些 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
所以这个提取键适用的列,而不是 index/key 的名称?如何在上面的查询中添加它?我需要加入什么table?
对于我能够做的索引
SELECT * FROM pg_indexes WHERE tablename = 'mytable' AND schemaname = 'myschema' ;
它获取索引,但没有明确列出它们应用到的列 - 我只看到它们是如何创建的 indexdef?我可以通过加入其他 table 来获取该信息,还是我必须解析 indexdef 并获取索引适用的列?
psql
has a -E
option:
-E
--echo-hidden
Echo the actual queries generated by \d
and other backslash commands. You can use this to study psql's internal operations. This is equivalent to setting the variable ECHO_HIDDEN
to on.
因此,如果您 运行 psql -E
并执行 \d+ myschema.mytable
,您应该确切地看到内部执行了哪些 SQL 查询。
我见过几个这样的例子 here or here
我能做我能做的大部分事情,但不是全部。
如果我有:
\d+ myschema.mytable
我列出了所有列和索引。索引的格式例如:
Indexes:
"id_pkey" PRIMARY KEY, btree (id,name,timestamp)
"ix05_id" btree (name,company)
我能够通过 sql 获取列,对于索引和键,我从上面 post 中找到了一些 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
所以这个提取键适用的列,而不是 index/key 的名称?如何在上面的查询中添加它?我需要加入什么table?
对于我能够做的索引
SELECT * FROM pg_indexes WHERE tablename = 'mytable' AND schemaname = 'myschema' ;
它获取索引,但没有明确列出它们应用到的列 - 我只看到它们是如何创建的 indexdef?我可以通过加入其他 table 来获取该信息,还是我必须解析 indexdef 并获取索引适用的列?
psql
has a -E
option:
-E
--echo-hidden
Echo the actual queries generated by
\d
and other backslash commands. You can use this to study psql's internal operations. This is equivalent to setting the variableECHO_HIDDEN
to on.
因此,如果您 运行 psql -E
并执行 \d+ myschema.mytable
,您应该确切地看到内部执行了哪些 SQL 查询。