我如何 return Postgre 中的主列名称?
How do I return the primary column name in Postgre?
我正在为 KnexJS 开发一个包装器,为了使错误更具描述性,我希望能够获得 table 的主列的名称。我看过,但找不到任何答案。我不擅长SQL,所以如果它更高级的话,试着把它分解一下。
找出给定 table(s) 上 PK 的 PK 名称和列名称:
SELECT t.relname AS table_name
, i.relname AS index_name
, ia.attname AS column_name
FROM pg_class t
JOIN pg_index ix
ON ix.indrelid = t.oid
AND ix.indisprimary = 't'
JOIN pg_class i
ON i.oid = ix.indexrelid
JOIN pg_attribute ia
ON ia.attrelid = t.oid
AND ia.attnum = ANY(ix.indkey)
WHERE t.relkind = 'r' -- table
AND t.relname = 'your_table_name'
请注意,对于复合 PK(多列),它将在单独的行中列出。如果你想要每个 table 一行,只需 GROUP BY t.relname, i.relname
和 select array_to_string(array_agg(ia.attname), ', ') as columns
.
我正在为 KnexJS 开发一个包装器,为了使错误更具描述性,我希望能够获得 table 的主列的名称。我看过,但找不到任何答案。我不擅长SQL,所以如果它更高级的话,试着把它分解一下。
找出给定 table(s) 上 PK 的 PK 名称和列名称:
SELECT t.relname AS table_name
, i.relname AS index_name
, ia.attname AS column_name
FROM pg_class t
JOIN pg_index ix
ON ix.indrelid = t.oid
AND ix.indisprimary = 't'
JOIN pg_class i
ON i.oid = ix.indexrelid
JOIN pg_attribute ia
ON ia.attrelid = t.oid
AND ia.attnum = ANY(ix.indkey)
WHERE t.relkind = 'r' -- table
AND t.relname = 'your_table_name'
请注意,对于复合 PK(多列),它将在单独的行中列出。如果你想要每个 table 一行,只需 GROUP BY t.relname, i.relname
和 select array_to_string(array_agg(ia.attname), ', ') as columns
.