2008-11-28 3 views
0

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

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

Я не дБА, мне кажется, что я пропустил что-то очевидное.

Благодаря

ответ

0

хмм, а если вы:

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

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

вы делаете

BEGIN; 
... 
COMMIT; 

при использовании pgadmin, а?

+0

Я нашел ошибку, я не делал BEGIN .. COMMIT в pgAdmin. Спасибо! – egesuato 2011-02-10 05:28:25

0

Вы можете ввести следующее в PSQL и добавить вывод на свой вопрос?

\d schema.table 
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).

+0

Пожалуйста, добавьте настоящие операторы обновления. – 2008-12-01 13:36:49

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