如何在 Postgre 中返回主列名?

Posted

技术标签:

【中文标题】如何在 Postgre 中返回主列名?【英文标题】:How do I return the primary column name in Postgre? 【发布时间】:2019-04-03 23:35:32 【问题描述】:

我正在开发 KnexJS 的包装器,并且为了使错误更具描述性,我希望能够获取表的主列的名称。我看过,但找不到任何答案。我不擅长 SQL,所以如果它是高级的,请尝试将其分解一下。

【问题讨论】:

如果 Knex.js 中没有这方面的内容,那么您有 ***.com/q/1214576/479863 的副本 【参考方案1】:

要找出给定表上 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(多列),它将在单独的行中列出它们。如果您希望每张表有一行,只需 GROUP BY t.relname, i.relname 并选择 array_to_string(array_agg(ia.attname), ', ') as columns

【讨论】:

如何从给定的表中获取列名? 从上面的查询中删除对pg_index ix 的所有引用,您将获得表中的所有列。

以上是关于如何在 Postgre 中返回主列名?的主要内容,如果未能解决你的问题,请参考以下文章

简单的 Postgresql 语句 - 列名不存在

如何在sql服务中将列名分配给标量函数的返回值

如何将表的列名存储在雪花的数组中

如何从java中的结果集中获取列名[重复]

postgre数据如何实现Oracle数据库中decode函数

如何在 VBA 中创建一个函数以返回与记录集中每条记录的特定条件匹配的列名?