sql - 亚马逊 Redshift 并发写入导致插入记录,导致重复

标签 sql amazon-web-services duplicates amazon-redshift

我一直在尝试解决一个问题,即同一个表上的两个并发更新导致创建/插入额外的记录。从未在任何其他关系数据库中经历过这种情况,我也不会。因此,我认为在跨多个节点分发查询的 redshifts 架构中可能是一个怪癖,但无法确定或提供真实世界的示例。

在运行这两个更新之前,我将新数据插入到表中。插入包含填写一天数据的每日快照,大多数列都有空值,准备好更新以填充它们。

更新是并发运行的,它们是简单的更新 sql,更新它们各自的列。如果单独运行,我看不到创建的其他记录且没有重复。

更新在整个表中运行,超过 2 亿条记录,但是重复只发生在最近填充的记录中(那几天的新数据。

这有点令人担忧,因为我永远不会假设更新会创建新记录,除了第一次插入创建的记录之外。

更奇怪的是,重复记录持有不同的数据。

我已经通过查看 redshifts 查询日志 (STL_query) 来确认没有其他查询超出预期。

最佳答案

我真的很难相信更新创造了新的值(value),你真的确定吗?
当涉及到同一张表上的并发事务时,我遇到了复杂的情况,所以我建议你明确地锁定你的表:

lock table <table> in exclusive mode;

在您操作它之前(独占模式将允许读取,但任何写入尝试都必须等待)

如果您不这样做并且 2 个事务尝试更新(插入很好,顺便说一句)同一个表,您很可能会收到“错误:1023 - 详细信息:表上的可序列化隔离违规” - 或者您报告的行为

关于sql - 亚马逊 Redshift 并发写入导致插入记录,导致重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799688/

相关文章:

mysql - SQL 查询以检索来自所有用户 friend 的消息

vector - 如何检查结构的集合是否在字段中具有重复的值?

duplicates - 如何删除重复项,但在 OpenOffice Calc 中为重复项保留第一个实例和一个空白单元格?

php - PDO 异常问题 - 如何捕捉它们

mysql - 在 mysql 中显示周日期范围以及周摘要

grails - Grails:GGTS无法在Amazon AWS EC2上运行,还有其他人成功吗?

amazon-web-services - AWS S3 托管网站从 index.html 重定向无法正常工作

ruby - AWS Ruby SDK Cloudformation 不会验证模板

android - 如何通过链接(而不是复制)使应用程序使用其自身文件夹之外的模块?

mysql - 如何在sql数据库中创建具有相同值和结构的列