обновление нескольких последовательностей postgres - PullRequest
1 голос
/ 15 марта 2020

У меня есть таблица, к которой я добавил новый столбец nxvl .

Мне нужно сделать что-то подобное

UPDATE table1
SET nxvl = nexval('my_sequence_1')
from table2 
where table1.col_id = table2.id and table2.val_col=1
order by table1.date

UPDATE table1
SET nxvl = nexval('my_sequence_2')
from table2 
where table1.col_id = table2.id and table2.val_col=2
order by table1.date

Postgres не не разрешить упорядочить на обновление

В нем около 100 000 строк. Это можно сделать с помощью команды «Обновить». В настоящее время есть только 2 значения в val_col ie 1 & 2

Поскольку это одноразовая вещь, я не против сделать это с функции и цикл по каждой строке и обновления.

Для знания, задающегося вопросом, есть ли лучший способ его достижения.

Использование Postgres 12.2

1 Ответ

0 голосов
/ 15 марта 2020

Вы можете установить порядок и извлечь значение соответствующей последовательности в подзапросе, а затем обновить таблицу (даже без учета порядка обновления)

UPDATE table1
SET nxvl = a.seq
FROM
 ( select table1.id, nexval('my_sequence_1') seq
  from table1 
   join table2 
     on table1.col_id = table2.id 
        and table2.val_col=1
  order by table1.date
 ) a
WHERE table1.id = a.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...