Liquibase - 使用 uuid 插入行

新手上路,请多包涵

我有两个表声明如下:

 <changeSet author="istvan" id="country-table-changelog">
    <createTable tableName="country">
        <column name="id" type="uuid">
            <constraints nullable="false" unique="true" />
        </column>
        <column name="name" type="varchar">
            <constraints nullable="false" unique="true" />
        </column>
    </createTable>
</changeSet>

<changeSet author="istvan" id="region-table-changelog">
    <createTable tableName="region">
        <column name="id" type="uuid" >
            <constraints nullable="false" unique="true" />
        </column>
        <column name="country_id" type="uuid">
            <constraints nullable="false" />
        </column>
        <column name="name" type="varchar">
            <constraints nullable="false" unique="true" />
        </column>
    </createTable>
</changeSet>

<changeSet author="istvan" id="region-country-foreign-key-constraint">
    <addForeignKeyConstraint
        baseTableName="region"
        baseColumnNames="country_id"
        referencedTableName="country"
        referencedColumnNames="id"
        constraintName="fk_region_country"
        onDelete="CASCADE"
        onUpdate="RESTRICT"/>
</changeSet>

我想用一些值从 liquibase 更改日志文件中填充两个表,例如:

 INSERT INTO country VALUES('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'HUNGARY');
INSERT INTO region VALUES('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'Baranya');

在示例中,我使用 aaaa’s 和 bbbb’s 只是因为简单。我想通过 DBMS 生成那些 UUID。

最好的方法是什么?我必须在我的变更日志文件中使用 SQL,还是可以使用 XML?我更喜欢 XML 或 JSON 等独立于 DBMS 的解决方案。

我的第二个问题是如何声明一个带有 UUID 的列,该列在插入时创建 UUID。就像是:

 <column name="id" type="uuid" value="??? GENERATE UUID ???">
    <constraints nullable="false" unique="true" />
</column>

感谢您的时间!

原文由 Farkas István 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用根据当前 DBMS 定义的属性来执行此操作。

 <property name="uuid_type" value="uuid" dbms="postgresql"/>
<property name="uuid_type" value="uniqueidentifier" dbms="mssql"/>
<property name="uuid_type" value="RAW(16)" dbms="oracle"/>

<property name="uuid_function" value="uid.uuid_generate_v4()" dbms="postgresql"/>
<property name="uuid_function" value="NEWID()" dbms="mssql"/>
<property name="uuid_function" value="sys_guid()" dbms="oracle"/>

然后在定义表时使用这些属性:

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

请注意,您需要使用 defaultValueComputed而不是 value

如果该列是使用默认值定义的,只需将其留在您的插入语句中,然后数据库将在插入时生成 UUID。

原文由 a_horse_with_no_name 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于 SQL SERVER 工作

<column name="uuid" valueComputed="newid()" />

原文由 andres perez 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏