如何通过 plpgsql 从 Postgres 获取表的主键?

新手上路,请多包涵

给定表名,如何从 plpgsql 函数中提取主键列及其数据类型的列表?

原文由 jsight 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 622
2 个回答

上面的查询非常糟糕,因为它真的很慢。

我会推荐这个官方版本:

http://wiki.postgresql.org/wiki/Retrieve_primary_key_columns

如果需要架构,则查询如下

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 = 'foo'::regclass AND
  indrelid = pg_class.oid AND
  nspname = 'public' AND
  pg_class.relnamespace = pg_namespace.oid AND
  pg_attribute.attrelid = pg_class.oid AND
  pg_attribute.attnum = any(pg_index.indkey)
 AND indisprimary

原文由 user3094383 发布,翻译遵循 CC BY-SA 3.0 许可协议

SELECT a.attname AS name, format_type(a.atttypid, a.atttypmod) AS type
FROM
    pg_class AS c
    JOIN pg_index AS i ON c.oid = i.indrelid AND i.indisprimary
    JOIN pg_attribute AS a ON c.oid = a.attrelid AND a.attnum = ANY(i.indkey)
WHERE c.oid = 'example'::regclass

输出:

  name |  type
------+--------
 id   | bigint

原文由 Paul Draper 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进