PostgreSQL:重复的键值违反了 UPDATE 命令的唯一约束

2024-03-06

执行 UPDATE 查询时,我们收到以下错误消息:

ERROR:  duplicate key value violates unique constraint "tableA_pkey"
DETAIL:  Key (id)=(47470) already exists.

但是,我们的 UPDATE 查询不会影响主键。这是一个简化版本:

UPDATE tableA AS a
SET
    items = (
        SELECT array_to_string(
            array(
                SELECT b.value
                FROM tableB b
                WHERE b.a_id = b.id
                GROUP BY b.name
            ),
            ','
        )
    )
WHERE
    a.end_at BETWEEN now() AND  now() - interval '1 day';

我们确保主键序列已经同步:

\d tableA_id_seq

其产生:

    Column     |  Type   |          Value           
---------------+---------+--------------------------
 sequence_name | name    | tableA_id_seq
 last_value    | bigint  | 50364
 start_value   | bigint  | 1
 increment_by  | bigint  | 1
 max_value     | bigint  | 9223372036854775807
 min_value     | bigint  | 1
 cache_value   | bigint  | 1
 log_cnt       | bigint  | 0
 is_cycled     | boolean | f
 is_called     | boolean | t

寻找最大表索引:

select max(id) from tableA;

我们得到了一个较低的值:

  max  
-------
 50363
(1 row)

您知道为什么会出现这种行为吗?如果我们排除有问题的 id,它就可以工作。

另一个奇怪的点是,将之前的 UPDATE 替换为:

UPDATE tableA AS a
SET
    items = (
        SELECT array_to_string(
            array(
                SELECT b.value
                FROM tableB b
                WHERE b.a_id = b.id
                GROUP BY b.name
            ),
            ','
        )
    )
WHERE a.id = 47470;

效果很好。我们错过了什么吗?

EDIT:触发器

我在此表上没有用户定义的触发器:

SELECT t.tgname, c.relname
FROM pg_trigger t
JOIN pg_class c ON t.tgrelid = c.oid
WHERE
    c.relname = 'tableA'
    AND
    t.tgisinternal = false
;

不返回任何行。

Note:我在用psql (PostgreSQL) 9.3.4版本。


不太确定是什么原因。但是,删除与已存在的 ids (?) 对应的两条(非重要)记录解决了该问题。

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

PostgreSQL:重复的键值违反了 UPDATE 命令的唯一约束 的相关文章

随机推荐

  • 泛型数组不接受空数组作为输入

    import Foundation func insertionSort
  • 在 ember.js 中实现“有条件”后退按钮

    我正在开发一个基于 ember js 版本 1 2 的移动应用程序 我试图找到最惯用的方法来实现许多移动应用程序中常见的全局菜单切换 后退按钮模式 具体来说 它是一个位于固定顶部工具栏左侧的按钮 当用户位于应用程序的主页 索引视图时 该按钮
  • 实体框架上下文中的复杂类型是什么

    现在我正在从 Pluralsight 上的视频中学习很多有关实体框架的知识 所以请原谅我的问题 它可能看起来很新 但我无法理解复杂类型是什么或为什么我需要它们 我确实知道我必须通过注释或 Fluent Api 来映射它们 如下所示 mode
  • .Net Core、便携式、标准、紧凑、UWP 和 PCL 之间的区别?

    我听说过 Net核心 Net 便携式 Net标准 Net 紧凑型 通用Windows平台 便携式类库 所有这些都向我解释为 完整 Net 的子集 允许您针对多个平台 所以我的问题是 有什么不同 如果我想编写一个可供尽可能多的受众使用的库 哪
  • 如何在 Windows 中将文件上传到 Solr?

    我需要验证文本提取在 Windows Server 2003 上安装的 Solr 上是否正常工作 我找到的将文件上传到 Solr 的所有示例都使用如下的curl curl http localhost 8983 solr update ex
  • 检查点是否位于自定义网格几何体内部

    检查点是否位于自定义 不规则 网格几何图形内部的最简单方法是什么 如果你的网格是特写的 您可以使用 THREE js 内置光线投射器 示例代码如下 const point new THREE Vector3 2 2 2 Your point
  • 在 iPhone 上合并音频文件

    我想将 caf 文件和 mp3 文件合并为 iPhone 上的 mp3 文件 或者我可以将它们转换为 aac 然后合并它们 我该怎么做 就像Kala OK一样 我想将我的声音和音乐融合在一起 您需要将两个文件解码为 LPCM 普通旧整数 将
  • PHP 脚本抓取整行

    感谢您花时间阅读本文 无论内容的质量如何 我都会感激每一个回复 我正在尝试创建一个在文本文件中搜索特定文本的 php 脚本 用户在 HTML 表单中输入特定文本 PHP 脚本应在文本文件中搜索该特定文本 HTML表单的输入字段的值为 use
  • 解析从云代码向特定用户发送推送通知

    我想从解析云代码向特定用户发送推送通知 因此 我在解析表的安装类中创建了一个用户部分 并将用户对象 ID 保存在那里 以便我可以通过 ID 定位用户并从云代码发送推送 https www dropbox com s dvedyza4bz3z
  • last-of-type 不适用于 IE11 和 Edge 中的自定义元素

    foo bar last of type background color red div class foo div
  • 使用 NHibernate 持久保存 Blob 流

    如果我有一个类声明为 public class MyPersistentClass public int ID get set public Stream MyData get set 如何使用 NHibernate 的映射将 MyData
  • 如何使用字符串按名称动态调用Python函数?

    我有一个 Python 函数调用 如下所示 import torchvision model torchvision models resnet18 pretrained configs use trained models 效果很好 如果
  • 如何在 Linux 中重新启动 IDLE Python Shell?

    在Windows的IDLE中 菜单栏上有一个Shell菜单 Shell 菜单上的项目之一是 重新启动 Shell Shell 菜单在 Linux 上的 IDLE 中不可用 当您对模块进行更改并希望在 shell 中再次运行该模块时 重新启动
  • Java注释的默认值是否被编译成字节码?

    我尝试对 Java 字节码实现几种静态分析 他们尝试计算某个方法是否具有特定属性 例如是一个工厂方法 由于这些分析很难测试 我决定编写一些 Java 代码并直接使用正确的属性注释方法 运行分析后 很容易自动检查计算的属性和注释的属性是否相同
  • 如何将 32 位 RGBA 图像转换为保留 alpha 的灰度

    我想在代码中按需将 32 位 RGBA 图像对象 最初是 32 位 PNG 转换为其 32 位灰度对应对象 我已经read https stackoverflow com questions 2265910 c convert image
  • 如何在 CodeIgniter 中测试我的 MySQL 更新查询是否成功? [复制]

    这个问题在这里已经有答案了 我有一个模型函数可以在我的 CodeIgniter 应用程序中更新用户 updates first of a user return true if successful false if not public
  • Scala Play 表单验证:一个案例类有不同的表单 - 这可能吗?

    我正在寻找一种方法 为一个案例类使用两种不同的形式 我试图用额外的构造函数来做到这一点 但失败了 看一下代码片段 case class LoginDetails password String field3 Option Int field
  • bean验证命令的默认参数?

    我目前正在尝试使用 bean 验证提供自定义验证消息 目前使用 spring mvc 3 1 1 apache bean 验证 在我的 bean 中 我指定 Size min 1 max 50 private String title 在我
  • Kafka 和 Spark 之间的 SSL

    我们正在使用 Kafka Spark Streaming 并将数据加载到 Cassandra 需要在运行kafka的节点和运行spark的节点之间实现安全层 有关如何在 kafka 和 Spark 节点之间实施 SSL 的任何指导吗 谢谢
  • PostgreSQL:重复的键值违反了 UPDATE 命令的唯一约束

    执行 UPDATE 查询时 我们收到以下错误消息 ERROR duplicate key value violates unique constraint tableA pkey DETAIL Key id 47470 already ex