我似乎无法找到一种方法来实现这一点(或不)
我需要实现的是非标准的,因此我很难找到解决方案。
我需要编写一个数据迁移工具来将旧记录与表中的新记录“交换”,但我有以下要求/约束:
所以我的理想解决方案是,蛮力交换他们的主键......
问题是如何在 postgresql 中的两条记录之间交换主键。我很难找到一种不会因重复键异常而失败的方法,即一种以事务方式运行更新“验证”的方法。
我试过了
UPDATE table
SET id = (CASE id WHEN 1 THEN 2 WHEN 2 THEN 1 ELSE id END)
Run Code Online (Sandbox Code Playgroud)
UPDATE table
SET id = CASE id WHEN 1 THEN 2 WHEN 2 THEN 1 END
WHERE id IN (1, 2);
Run Code Online (Sandbox Code Playgroud)
都在重复键约束上失败
我正在使用 PostgreSQL 11.6
数字主键的批量更新解决方案,感谢以下好人的输入:
-- disable foreign key constraint validation
BEGIN;
SET session_replication_role='replica';
-- update the pairs of ids to their negative counterparts
WITH query …
Run Code Online (Sandbox Code Playgroud)