【发布时间】:2015-11-02 09:06:52
【问题描述】:
我目前正在使用 Liquibase,并为用户和角色创建了一个表。每个用户都有一个唯一的 ID,该 ID 在插入用户时自动生成(通过自动递增序列)。然后,角色表中的角色将引用此 id。
现在我尝试使用 Liquibase 插入默认用户。首先我插入用户,然后我想插入一个引用这个新创建的用户的角色。
问题是我在 Liquibase 中找不到方法来检索为新用户生成的 id,以便在插入新角色时可以使用它。
这可能吗?如果是,应该怎么做?
想做以下事情:
<insert tableName="xxx_user">
<!-- Id is auto incremented -->
<column name="user_name" value="XXX" />
<column name="password" value="XXX" />
<column name="first_name" value="XXX" />
<column name="last_name" value="XXX" />
</insert>
<insert tableName="user_role">
<column name="user_id" value="<point at the auto generated id in previous insert>" />
<column name="role" value="A_ROLE" />
</insert>
【问题讨论】:
-
请向我们展示您的 Liquibase 变更集,但您很可能正在寻找
lastval()或currval()- 或者您只需修改 CTE 的单个数据即可。 -
这可以通过纯供应商特定的 SQL 轻松完成。但我尝试在 Liquibase 中使用 XML 来完成,并不特定于任何供应商。
-
添加了我想做的 Liquibase 示例
-
您可以尝试
valueComputed="lastval()",但这将再次取决于供应商。我不认为 Liquibase 对这种事情有任何支持。不相关,但是:您真的有名为user的表吗?这是个坏主意,因为user是一个保留字,而requires to be quoted 是您每次使用时的保留字。
标签: sql database postgresql liquibase