【发布时间】:2014-09-24 14:27:49
【问题描述】:
免责声明:我的 DB 知识主要来自 Mysql,所以我可能会误解 vertica 中的一些东西...
我想知道是否存在一种在 vertica 中插入/更新值的技术,同时在多个会话中强制执行唯一约束。假设我有一张桌子:
'id', 'unique_field', 'some_filed'
并且对 unique_field 有一个唯一约束。我的理解是,在 vertica 中,首先需要进行插入,然后进行 ANALYZE_CONSTRAINTS 以验证是否违反了约束。在我的具体情况下,我有多个会话执行 INSERTS 到同一个表,他们可能会尝试推送相同的记录。单个会话的顺序似乎是:
Insert into table (id, unique_field, some_field) values (5, 'abc', 'data');
SELECT ANALYZE_CONSTRAINTS(table);
COMMIT;
如果我在两个单独的会话中运行此序列,则有可能两个查询都尝试插入相同的 unique_field,并且对于每个查询都不会检测到约束违规,因为它们位于单独的事务中,这将导致重复数据。
有没有更好的方法来防止这种情况发生?或者我错过了一些东西。
【问题讨论】:
标签: database transactions unique-constraint vertica