Liquibase:在表中添加一列,并为每个现有行的新列填充一个唯一值

时间:2018-11-21 12:43:20

标签: postgresql liquibase

我正在寻找以下问题的解决方案:

我有一个表A,我想添加一列-用于UUID字符串的简单varchar =>简单。

问题是,我在现有行中需要一个唯一的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 :(得分:0)

我也曾经尝试过解决这个问题的方法,但是没有运气。 所以我不得不写单独的changeSets:

  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>