列出所有外键 PostgreSQL

2023-12-14

我需要一个返回的查询:

“表名”、“字段名”、“字段类型”、“约束名”

到目前为止我有:

select conrelid::regclass AS table_name,
       regexp_replace(pg_get_constraintdef(c.oid), '.*\((.*)\)', '\1') as fields,
       conname as contraint_name
from   pg_constraint c
join   pg_namespace n ON n.oid = c.connamespace
join   pg_attribute at on 
--join   pg_type t ON t.typnamespace = n.oid
where  contype ='f' 

外键可能基于多个列,因此conkey and confkey of pg_constraint是数组。您必须取消数组的嵌套才能获取列名称或类型的列表。您可以使用这些功能:

create or replace function get_col_names(rel regclass, cols int2[])
returns text language sql as $$
    select string_agg(attname, ', ' order by ordinality)
    from pg_attribute,
    unnest(cols) with ordinality
    where attrelid = rel
    and attnum = unnest
$$;

create or replace function get_col_types(rel regclass, cols int2[])
returns text language sql as $$
    select string_agg(typname, ', ' order by ordinality)
    from pg_attribute a
    join pg_type t on t.oid = atttypid,
    unnest(cols) with ordinality
    where attrelid = rel
    and attnum = unnest
$$;

这些函数在查询约束和索引时可能非常方便。您的查询对他们来说很好而且简单:

select 
    conrelid::regclass,
    get_col_names(conrelid, conkey) col_names,
    get_col_types(conrelid, conkey) col_types,
    conname
from pg_constraint
where contype ='f';

 conrelid | col_names | col_types |        conname         
----------+-----------+-----------+------------------------
 products | image_id  | int4      | products_image_id_fkey
(1 row)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列出所有外键 PostgreSQL 的相关文章

随机推荐

  • 使用平衡组的正则表达式

    我有一个基本的文本模板引擎 它使用如下语法 foo bar IF MY VAR some text IF OTHER VAR some other text ENDIF ENDIF bar foo 我对用于解析它的正则表达式有一个问题 它没
  • Javascript:比较运算符中操作数的顺序[重复]

    这个问题在这里已经有答案了 我看到很多人写作有什么具体原因吗 if 1 a 代替 if a 1 我已经给出了一个答案 其中我写了类似的内容Array obj constructor当有人问我他经常看到人们这样写而不是这样写obj const
  • 使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效

    我对 Python 和 SO 来说是一个相对新手 我有一个 xml 文件 需要从中提取信息 我已经为此苦苦挣扎了好几天 但我想我终于找到了可以正确提取信息的东西 现在我在获得正确的输出时遇到了麻烦 这是我的代码 from xml impor
  • Firebase 函数先解析请求正文,然后才能在 Express 中处理它

    我正在尝试处理 Firebase 函数中的无效请求 因此使用无效的 JSON 发出发布请求 目的是在 Express 中处理它 但我得到400 错误 语法错误 JSON 中位置 20 处出现意外标记 a 在它到达 Express 层之前 最
  • WCF SOAP - 从子节点中删除命名空间

    我正在构建一个服务 并且有一个客户端需要我尝试在我的肥皂服务中接收的特定格式的 xml 我遇到的问题是 当我需要仅在根节点上时 命名空间前缀应用于子节点 下面是在soapui中为请求生成的soap信封
  • 这些 Git 合并标记的简单解释是什么?

    下面参考代码段1 2 3解释Git合并标记的含义 Code from beginning of file lt lt lt lt lt lt lt HEAD code segment 1 merged common ancestors co
  • 为什么linux内核中的udelay和ndelay不准确?

    我做了一个这样的函数 trace printk 111111 udelay 4000 trace printk 222222 日志显示它是 4 01 毫秒 没问题 但当我这样打电话时 trace printk 111111 ndelay 1
  • 如何在 CORS 预检选项请求中发送自定义标头?

    我正在尝试发送 JSON 负载的 CORS 请求 我控制服务器和客户端 我在这里跟随 服务器有一个自定义标头 必须与每个请求一起发送 因此 此自定义标头使请求 不简单 因此必须使用 OPTIONS 请求对请求进行预检 我可以看到 jQuer
  • Rails 4 应用程序中的子域

    今天我遇到了一个很奇怪的现象 当开发一个每个用户都有自己的子域的 Rails 应用程序并尝试使用 Devise 来完成此操作时 我遇到了未注册的子域也会路由到根页面的情况 因此 例如 即使没有 显式 子域 它也会将我路由到主应用程序页面 也
  • Excel编程

    我想让我男朋友尝尝编程的滋味 如果由我决定 我会教Scheme Haskell 或F 但因为他更愿意学习一些对他作为财务顾问的工作有用的东西 即Excel 编程 Excel 编程有哪些选项 对于刚刚学习编程但想要完成任务的人 您会推荐哪一款
  • 将长文本换行到下拉列表中?

    我的 asp net 页面上的下拉列表中有清晰的长文本 它违反了 UI 边界并超出了 UI 的分配区域 无论如何 我可以使用 CSS 或 javascript 包裹 而不是修剪 它吗 我必须显示整个字符串 无论它有多长 更长的答案 是的 您
  • 测试数据中因子水平未知的 Predict.lm()

    我正在拟合一个模型来分解数据并进行预测 如果newdata in predict lm 包含模型未知的单个因素水平 all of predict lm 失败并返回错误 有没有好的方法可以拥有predict lm 返回模型已知的因子水平的预测
  • 为什么-2147483648在可以容纳int的情况下会自动提升为long?

    include
  • 在 Eclipse 中为从 Eclipse 启动的应用程序指定替代 JRE

    我正在尝试在 Eclipse 中为我将从 Eclipse 启动的应用程序指定一个替代 jre 我的默认值是 1 6 我需要使用 jdk 1 4 2 运行 我不确定我在以下代码中是否做了正确的事情 Path jreContainerPath
  • bash:替换“”内的变量值

    抱歉 如果问题非常简单 但我是 shell 脚本的新手 我正在尝试写这样的东西 for i in 1 20 do curl something i d something i something done 问题是第二个 i单引号内的部分 不
  • MySQL别名简写?

    我需要从两个表中选择所有列 但需要能够在结果中区分它们 是否有一种简写方法可以为结果中的每一列指定一个别名 例如 SELECT t1 AS t1 SOMETHING t2 AS SOMETHING ELSE FROM TABLE1 INNE
  • 阻止仙人掌图上的有向路径[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我想找到最长的路径距离仙人掌图具有某些阻塞定向路径 For example if we have following 4 nodes 这意味着 如果我们访问 1 我们就无法访问 2 也
  • 如何在jqGrid表单中添加简单的文本标签?

    当从寻呼机使用 添加 或 编辑 表单时 我想知道如何在表单中添加一个简单的静态标签 而不创建任何对 colNames 和 colModel 产生影响的附加列 例如 我有一个非常简单的典型添加表单 它从包含一些标签和表单元素的寻呼机打开 名称
  • AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象

    我意识到已经有人问过这个问题 但到目前为止我读过的解决方案似乎没有什么作用 我正在使用 Entity Framework 6 1 和 AutoMapper 3 1 1 采取以下对象 Company and CompanyListItem 我
  • 列出所有外键 PostgreSQL

    我需要一个返回的查询 表名 字段名 字段类型 约束名 到目前为止我有 select conrelid regclass AS table name regexp replace pg get constraintdef c oid 1 as