- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在探索使用序列与 AUTO-INCREMENT 的细微差别时,我正在努力寻找一个真实的例子来说明如何制作与数据库无关的 liquibase 项目。
场景要求:
创建一个包含一些列的表,在 PKID 的值是某个计算值的地方插入数据
我的起点是一个现有的 postgres 数据库,它引用了 changeSet
中的一个 .sql 文件。创建序列:
<sqlFile path="create-tables.sql" relativeToChangelogFile="true"/>
来自 create-tables.sql 的 SQL
CREATE TABLE new_table (
pkid integer NOT NULL,
);
CREATE SEQUENCE new_table_pkid_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
有一个changeSet可以根据顺序插入记录,如下:
<changeSet author="yoman" id="123">
<insert tableName="new_table">
<column name="pkid" valueComputed="nextval('new_table_pkid_seq')"/>
</insert>
</changeSet>
但是,MySQL 不支持序列。 Oracle 还以不同的语法使用序列。
所以我不知道如何制定适用于所有三个的解决方案?
我的想法是
放弃使用序列和/或函数,并为所有 3 个数据库使用 AUTO-INCREMENT。然后删除 create-tables.sql 并使用 liquibase XML 创建表 changeSet
语法。
在 postgres 中创建一个函数而不是序列,并在 Oracle 和 MySQL 中创建同名函数,模拟序列函数。然后指定函数名:
<column name="pkid" valueComputed="INCREMENT_FUNCTION()"/>
问题..
问题是,如果我尝试 #1,我不知道 XML 会是什么样子(例如,我是否使用 dbms
?)?此外,序列提供了更大的灵 active ,因此不确定其他贡献者是否同意使用 AUTO-INCREMENT。
不确定如何在 liquibase 中为这 3 个目标主机实际生成通用函数。
据我所知,liquibase 是一种插入数据库不可知设置概念的工具。但是我找不到有关如何创建适用于多个数据库目标的 liquibase 项目的一些基本示例的任何文档。
最佳答案
选项:
Oracle 12c 支持 AUTO_INCREMENT
,因此这是一个选项。
不要试图成为数据库不可知论者。过去我见过许多公司尝试构建与数据库无关的应用程序。问题是您最终会做出妥协,并且最终会得到可以在任何地方运行的糟糕应用程序。这些公司中的大多数现在都倒闭了
有 CODE_CONTROL 表的概念;但这是一个糟糕的选择,我什至不打算解释它!
关于mysql - 使用 liquibase 使用序列的数据库不可知示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42426444/
我是一名优秀的程序员,十分优秀!