liquibase 自动为多数据库生成 UUID

liquibase auto generate UUID for multi database

我正在尝试使用 liquibase 自动生成 UUID 作为主键。这个 post 为 postgresql 提供了一些想法,我正在尝试使用它。

<property name="uuid_type" value="uuid" dbms="postgresql"/>
<property name="uuid_function" value="uid.uuid_generate_v4()" dbms="postgresql"/>

<column name="id" type="${uuid_type}" defaultValueComputed="${uuid_function}">
    <constraints nullable="false" unique="true" />
</column>

但是,我需要一个解决方案来单独使用 H2 来完成这项工作。我看到有人建议在单独使用 h2 时使用以下内容,但它不能在列定义中共享 defaultValueComputed(我不确定 h2 是否支持可以分配给 defaultValueComputed 的函数)

<property name="uuid_type" value="varchar(36)" dbms="h2"/>

有没有办法在 liquibase 中同时支持 Postgres 和 H2

你的部分问题是问你是否可以在 H2 中生成 uuid 对吗?我不是专家,但看起来你可以: http://www.h2database.com/html/functions.html#random_uuid

其次,您询问是否可以在 liquibase 中执行此操作,类似于针对 Postgres 的操作方式:

<property name="uuid_type" value="uuid" dbms="postgresql"/>
<property name="uuid_function" value="uid.uuid_generate_v4()" dbms="postgresql"/>

<column name="id" type="${uuid_type}" defaultValueComputed="${uuid_function}">
    <constraints nullable="false" unique="true" />
</column>

你试过了吗:

<property name="uuid_type" value="uuid" dbms="h2"/>
<property name="uuid_function" value="RANDOM_UUID()" dbms="h2"/>

<column name="id" type="${uuid_type}" defaultValueComputed="${uuid_function}">
    <constraints nullable="false" unique="true" />
</column>