Сдвиг (обновление) уникальных значений столбцов в PostgreSQL
Используя MS SQL Server, работает нормально:
CREATE TABLE #temptable(mykey int primary key)
INSERT INTO #temptable VALUES (1)
INSERT INTO #temptable VALUES (2)
UPDATE #temptable SET mykey=mykey+1
Однако при использовании PostgreSQL происходит следующее:
CREATE TABLE pg_temp.tbl_test(testkey integer primary key)
INSERT INTO pg_temp.tbl_test VALUES (1)
INSERT INTO pg_temp.tbl_test VALUES (2)
UPDATE pg_temp.tbl_test SET testkey=testkey+1
ОШИБКА: двойное значение ключа нарушает уникальное ограничение "tbl_test_pkey". ПОДРОБНЕЕ: Ключ (testkey) = (2) уже существует.
Мне нужно увеличивать каждое значение одного столбца в одной таблице, которая является частью составного уникального ограничения. Как я могу сделать это в одном утверждении?
Спасибо !
Изменить: Если вам интересно, почему это имеет смысл (по крайней мере для меня), вот более полный сценарий.
У меня есть одна таблица предметов, организованных по категориям. Каждый элемент имеет определенную позицию в категории.
category_id (PK) | category_position (PK) | item_attribute_1 | item_attribute_2
1 | 1 | foo | bar
1 | 2 | foo2 | bar2
2 | 1 | foo4 | bar4
2 | 2 | foo3 | bar3
Эта таблица содержит данные как:
category1 : (foo, bar), (foo2, bar2)
category2 : (foo4, bar4), (foo3, bar3)
Обратите внимание, что (foo4, bar4) предшествует (foo3, bar3) в категории 2. Теперь, если я хочу переупорядочить элементы в одной категории, мне нужно обновить category_position ... Но из-за PK я не могу сдвигать значения с помощью PostgreSQL, как с SQL Server.