Использование psql для запуска обновления - PullRequest
0 голосов
/ 28 ноября 2008

У меня таблица с двумя столбцами - это уникальный ключ, и я не могу изменить схему.

Я пытаюсь выполнить обновление, используя 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 работает без ошибок .

Я не дба, мне кажется, что я упускаю что-то очевидное.

Спасибо

Ответы [ 4 ]

0 голосов
/ 01 декабря 2008

хм, а если вы:

select idnazione, nextego 
from partitaiva 
where partitaiva='02469480244' 
order by idnazione, nextego;

у вас нет повторяющихся строк?

ты делаешь

BEGIN;
...
COMMIT;

также при использовании pgadmin?

0 голосов
/ 01 декабря 2008

Вот вывод:

              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).

0 голосов
/ 01 декабря 2008

Реальное заявление об обновлении:

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 работает нормально.

0 голосов
/ 28 ноября 2008

Можете ли вы напечатать следующее в psql и добавить вывод к вашему вопросу?

\d schema.table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...