如何查找给定列是否存在唯一键约束

2023-11-23

我正在编写一个 perl 脚本,我需要在其中运行更新查询。但我需要检查 update sql 命令是否不违反唯一键约束。 所以如果我有一张桌子tb(C1,C2,C3)我的更新查询如下:

update tb set C1='b1' where C2='a1' ;

有没有办法查找列是否存在唯一键约束C1,C2 before尝试更新? IE:UNIQUE(C1,C2).


您可以查询系统目录 for 独特的约束, 尤其pg_constraint and pg_attribute:

SELECT c.conname, pg_get_constraintdef(c.oid)
FROM   pg_constraint c
JOIN  (
   SELECT array_agg(attnum::int) AS attkey
   FROM   pg_attribute
   WHERE  attrelid = 'tb'::regclass  -- table name optionally schema-qualified
   AND    attname  = ANY('{c1,c2}') 
   ) a ON c.conkey::int[] <@ a.attkey AND c.conkey::int[] @> a.attkey
WHERE  c.contype  = 'u'
AND    c.conrelid = 'tb'::regclass;
  • The 对象标识符类型 regclass有助于明确识别您的桌子。

  • 系统目录信息功能pg_get_constraintdef()为您提供格式良好的信息,这对于您的请求来说并不是绝对必要的。

  • 还使用数组运算符 <@ and @>确保数组完全匹配。 (列的顺序未知。)系统列是smallint and smallint[]分别。投射到integer使其与这些操作员一起工作。

  • 直接在系统目录中查找列名时,列名区分大小写。如果你没有双引号C1 and C2在创建时,你必须使用c1 and c2在此背景下。

  • 也可以有多列主键约束强化独特性。要在查询中覆盖它,请改用:

    WHERE  c.contype IN ('u', 'p')
    

基于 @Roman 的小提琴,这个还演示了 pk 情况:

->SQLfiddle

唯一索引

上述两个(unique & pk 约束)都是通过唯一索引的方式实现的。除此之外还可以有唯一索引有效地执行与正式声明的唯一约束相同的操作。去抓他们全部查询系统目录pg_index相反,以类似的方式:

SELECT c.relname AS idx_name
FROM  (
   SELECT indexrelid, string_to_array(indkey::text, ' ')::int[] AS indkey
   FROM   pg_index
   WHERE  indrelid = 'tb'::regclass
   AND    indisunique                    -- contains "indisprimary"
   ) i
JOIN  (
   SELECT array_agg(attnum::int) AS attkey
   FROM   pg_attribute
   WHERE  attrelid = 'tb'::regclass
   AND    attname  = ANY('{c1,c2}')
   ) a ON i.indkey <@ a.attkey AND i.indkey @> a.attkey
JOIN   pg_class c ON c.oid = i.indexrelid;

这里特别困难的是内部类型int2vector。我通过投射文本并转换为来处理它int[].

请注意,目录表的实现可能会随着专业的不同而改变。这些查询不太可能中断,但有可能。

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

如何查找给定列是否存在唯一键约束 的相关文章

  • 如何检测 Postgres 中持有锁的查询?

    我想不断跟踪 postgres 中的互锁 我碰到锁具监控 https wiki postgresql org wiki Lock Monitoring文章并尝试运行以下查询 SELECT bl pid AS blocked pid a us
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • 是否允许在流水线 PL/SQL 表函数中使用 SELECT?

    管道函数的文档指出 在 SQL 语句 通常是SELECT 并且在大多数示例中 管道函数用于数据生成或转换 接受客户作为参数 但不发出任何 DML 语句 现在 从技术上讲 可以使用 SELECT 而不会出现 Oracle 中的任何错误 ORA
  • pq:无法调整共享内存段的大小。设备上没有剩余空间

    我在仪表板上有许多面板 数量约为 6 个 用于显示数据点图表 对 PostgreSQL 数据库的 Dockerized 实例进行查询 直到最近 面板都工作正常 有些面板停止工作并报告如下错误 pq 无法将共享内存段 PostgreSQL 2
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • 即使将“enable_seqscan”设置为关闭后,也未使用数组列上的 GIN 索引?

    根据推荐this https stackoverflow com questions 4058731 can postgresql index array columns comment10357041 4059785评论 我建立了一个 i
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 外键引用多个表

    我有4张桌子 A ida name B ida B specific stuff C ida C specific stuff D ida D specific stuff 我希望另一个表 E 可以仅引用 B 或 C 而不是 D 我可以在其
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑
  • 使用包含空值列的 WHERE 子句的更新语句

    我正在使用另一个表中的数据更新一个表上的列 这WHERE子句基于多个列 并且某些列为空 根据我的想法 这个空值是什么throwing off你的标准UPDATE TABLE SET X Y WHERE A B陈述 See 这个 SQL 小提
  • 根据 PostgreSQL 中的列将文本附加到列数据

    我想将一些文本附加到表格每一列的每个单元格中 作为该特定列的符号 例如 假设我的表如下 所有字段的类型字符不同 name age location james 45 france simon 33 usa ben 76 china 我想将其
  • 如何在 SQLite 中获取最后插入的 ID?

    SQLite 中是否有任何内置函数可以获取最后插入的行 ID 例如 在 mysql 中我们有LAST INSERT ID 这种功能 对于 sqlite 任何可用于执行相同过程的函数 请帮我 Thanks SQLite 这可以使用SQLite
  • 使用 xmlagg 时出现子查询错误和太多值

    我在连接许多大型表中的所有数据时遇到问题 我昨天对此提出了问题 但不幸的是 listagg 似乎不是一个好的选择 链接子查询返回多行 https stackoverflow com questions 54651144 subquery r
  • ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成它吗?

    我有一张桌子 上面有 除其他外 一个名字和一个等级 我想返回所有唯一名称的集合 但对于返回的每个名称 我想选择排名最高的行 这很简单 有两个嵌套的 SELECT 语句 SELECT FROM SELECT FROM foo ORDER BY
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • 使用nodejs的sequelize更新多对多连接表

    我有一个产品表和一个类别表 一个产品可以有多个类别 一个类别可以有多个产品 因此我有一个 ProductsCategories 表来处理多对多连接 在下面的示例中 我尝试将我的一款产品 ID 为 1 与 3 个不同的类别 ID 为 1 2

随机推荐

  • 需要在MongoDB中存储高精度十进制值

    我对 MongoDB 的经验很少 我通常从事大型 SQL Server 数据库的工作 MongoDB 仅支持 double 和没有小数 C 驱动程序将小数序列化为字符串 如果我将小数存储为字符串 我会错过什么功能 MongoDB 有没有办法
  • 显示隐藏的 WPF 窗口

    在 WPF 窗口中我想隐藏它 使用显示另一个窗口ShowDialog然后取消隐藏第一个窗口 当我这样做时 this Hide var window2 new Window2 window2 ShowDialog this Show 第一个窗
  • 如何从在线 UML 模型生成 Java?

    我需要在线创建 UML 类图并从中生成 Java 代码 像 cacoo 这样的绘图工具不允许生成代码 因为它们不是真正的 UML 建模器 有人知道生成 Java 代码的 UML 在线工具吗 谢谢你的帮助 你应该看看 GenMyModelUM
  • 解决类似 Flood-It 难题的最少点击次数

    我有 N M 网格 其中每个单元格都用一种颜色着色 当玩家单击颜色为 的网格中的任何单元格时 颜色为 的网格左上角的单元格将接收颜色 但不仅如此 所有通过以下方式连接到源的单元格仅使用颜色 或 的路径也会接收颜色 单元之间的连接应仅在水平和
  • 在dos批处理脚本中检测sqlplus错误?

    我们有以下批处理脚本 echo release sql echo exit sqlplus x y orcl if errorlevel gtr 1 goto dberror 问题是 声明if errorlevel gtr 1当出现 sql
  • ASP.NET MVC 语言更改链接

    我有一个 ASP NET MVC 站点 它使用资源以两种语言显示 为了允许服务器以适当的语言显示站点 取决于用户浏览器中配置的语言 我将以下内容放入 web config 中
  • 为什么使用 HTML5 语义标签而不是 div? [复制]

    这个问题在这里已经有答案了 为什么使用 HTML5 语义标签headers section nav and article而不是简单地div与首选的css to it 我创建了一个网页并使用了这些标签 但它们与div 他们的主要目的是什么
  • 当 python 文件必须使用 #!/bin/env python 时处理多个 python 版本

    我有这个问题 System A运行 Ubuntu 并需要Python 2 6对于一堆不同的事情 我安装了Python 2 7分别于System A System B has Python 2 7原生地 我有一个 python 脚本BLAH其
  • OSGI 缺少需求错误

    我是 OSGI 新手 我正在尝试弄清楚如何解决如下错误 org osgi framework BundleException 捆绑包 org foo serviceBundle 253 中未解决的约束 无法解析 253 0 缺少需求 253
  • 如何阻止 SwiftUI 选择器对其可见区域之外的触摸做出反应?

    我在视图中有一个选择器 我希望将其限制为定义的高度和宽度 虽然下面的代码在视觉上实现了这一点 但选择器响应其区域之外的点击操作 在某些情况下 响应点击附近的按钮 就像我点击将选择器滚动到其值的开头或结尾一样 按钮不会响应点击 选择器会响应
  • MultinomialNB 错误:“未知标签类型”

    我有两个 numpy 数组 X train 和 Y train 其中第一个维度 700 1000 由值 0 1 2 3 4 和 10 填充 第二个维度 700 由值填充值 新鲜 或 腐烂 因为我正在使用烂番茄的 API 由于某种原因 当我执
  • Entity Framework 7 中表和属性的名称不区分大小写

    我使用 Entity Framework 7 和 Npgsql 适配器 EF生成的Sql看起来像 SELECT r Id r Name FROM public Role AS r 它在 Postgres 中不起作用 因为区分大小写的策略 为
  • JavaScript 函数导入不起作用

    我正在尝试从单独的 js 文件导入函数 当我声明导入命令时 页面不执行代码 但是 当我删除导入命令并执行一个简单的警报 Hello 时 页面上会弹出该内容 项目结构 Todo 应用程序 js 两个 js main js index html
  • 有没有办法在 Javascript 中获取所有事件侦听器绑定?

    我正在寻找一种我可以的方法列出所有事件侦听器绑定是在网站上用 JS 或其他脚本 制作的 主要是我想找出双重绑定 出于调试原因 但我想它还有其他问题 杰出的将是浏览器的插件 您可以在网站上看到哪些元素具有哪些类型eventlisteners边
  • 使用 data.table 进行内存分析

    在包含调用的 R 代码中分析内存的正确方法是什么data table功能 假设我想确定表达式期间的最大内存使用量 该参考文献表明Rprofmem可能不是正确的选择 https cran r project org web packages
  • 组合向量和 data.frame 匹配列值和向量值

    I have vetor lt c 1 2 3 data lt data frame id c a b a c a 我需要一个将每个向量值与特定 id 相匹配的 data frame 输出 结果 id vector1 1 a 1 2 b 2
  • CGRect 和 CGPath 的交集

    有没有一种有效的方法来检测 CGPath 和 CGRect 是否相交 我考虑过循环遍历 CGRect 内的每个点 如下所示 for CGPoint point in rect if CGPathContainsPoint path nil
  • C# 5 的“即发即忘”中的异常处理(在 .net 4.5 中)

    考虑以下 一劳永逸 用例 调用者从我的方法请求一些数据 我的方法检查缓存以查看数据是否已经存在 如果不是 它会从源中获取并缓存它 调用者在获取结果之前不需要等待缓存发生 并且如果缓存失败 该方法不应阻止调用者获取结果 我今天所拥有的 看起来
  • 为什么我的 Python 代码为列表中的所有元素提取相同的数据?

    My project consists of making a competitive watch table for hotel rates for an agency It is a painful action that I want
  • 如何查找给定列是否存在唯一键约束

    我正在编写一个 perl 脚本 我需要在其中运行更新查询 但我需要检查 update sql 命令是否不违反唯一键约束 所以如果我有一张桌子tb C1 C2 C3 我的更新查询如下 update tb set C1 b1 where C2