Liquibase: добавьте столбец в таблицу и заполните новый столбец для каждой существующей строки уникальным значением - PullRequest
0 голосов
/ 21 ноября 2018

Я ищу решение для следующей проблемы:

У меня есть таблица A, и я хочу добавить столбец - простой varchar для строк UUID => easy.

Проблемав том, что мне нужен уникальный UUID в существующих строках: я должен - каким-то образом - пройти по всем строкам и добавить сгенерированный UUID.

То, что я до сих пор пробовал, это:

<addColumn tableName="mhds_task">
  <column name="execution_key" type="varchar(255)" valueComputed="(SELECT md5(random()::text || clock_timestamp()::text)::uuid)"/>
</addColumn>

Но это даст мне одно и то же значение в каждой строке - я предполагаю, что liquibase вычисляет значение один раз для каждого столбца?

Я исследовал 2 часа сейчас - я не могу поверить, что я единственный, ктохочет достичь чего-то подобного;)

Есть идеи или намеки?

С уважением, Мариус

1 Ответ

0 голосов
/ 21 ноября 2018

Я тоже пытался найти решение этой проблемы в один день, но безуспешно.Поэтому мне пришлось написать отдельные наборы изменений:

  1. Чтобы просто добавить столбец без значений;
  2. Чтобы заполнить столбец сгенерированными данными как таковые:

    <changeSet id="foo" author="bar">
       <update tableName="mhds_task">
            <column name="execution_key" 
            valueComputed="(SELECT md5(random()::text || clock_timestamp()::text)::uuid)"/>
        </update>
     </changeSet>
    
...