我有一个包含两列的表是一个唯一的键,我无法更改架构。
我正在尝试使用psql执行更新,其中我更改了其中一个键的值。该脚本类似于以下内容:
BEGIN;
UPDATE t1 SET P1='23' where P1='33';
UPDATE t1 SET P1='23' where P1='55';
COMMIT;
将psql与命令一起使用:
psql -U user -f file
我收到了错误
ERROR: duplicate key violates unique constraint "<key_name>"
但是该列与另一列关键,并且更改它不会“破坏”任何唯一约束。 pgAdmin3中的相同查询运行良好,没有错误。
在我看来,我不是一个dba,我错过了一些明显的东西。
由于
答案 0 :(得分:0)
您可以在psql中键入以下内容并将输出添加到您的问题中吗?
\d schema.table
答案 1 :(得分:0)
这是输出:
Tabella "public.partitaiva"
Colonna | Tipo | Modificatori
----------------+------------------------+--------------
id | bigint | not null
idnazione | bigint | not null
partitaiva | character varying(20) | not null
logicaldelete | boolean |
prevego | bigint |
nextego | bigint | not null
lastmodified | bigint |
creationuser | character varying(255) |
creationtime | bigint |
lastmodifyuser | character varying(255) |
version | bigint |
Indici:
"partitaiva_pkey" PRIMARY KEY, btree (id)
"partitaiva_idnazione_key" UNIQUE, btree (idnazione, partitaiva, nextego)
Vincoli di integrità referenziale
"fk2659231b8f0d2c9" FOREIGN KEY (idnazione) REFERENCES nazione(id)
两列idnazione和partitaiva是键(与nextego一起但总是等于-1)。
答案 2 :(得分:0)
真正的更新声明是:
BEGIN;
UPDATE partitaiva SET partitaiva='02469480244' WHERE partitaiva='80911556878';
UPDATE partitaiva SET partitaiva='02469480244' WHERE partitaiva='75545502025';
UPDATE partitaiva SET partitaiva='02469480244' WHERE partitaiva='11056297226';
COMMIT;
列“idnazione”在每一行都不同,更重要的是pgAdmin3中的相同语句运行正常。
答案 3 :(得分:0)
select idnazione, nextego
from partitaiva
where partitaiva='02469480244'
order by idnazione, nextego;
你没有得到任何重复的行?
你正在做什么BEGIN;
...
COMMIT;
同时使用pgadmin?