我们在PostgreSQL上使用Java/Spring/Hibernate实现了一个新系统.一旦对表中的记录进行修改/删除,该系统就需要制作每个记录的副本.稍后,Reports将查询审计表以向用户显示数据.
我计划通过在表上创建一个触发器来实现这个审计/版本控制功能,这个触发器会将修改后的行(已删除的行)"TO"复制到一个名为ENTITY_VERSIONS的表中,该表将包含大约20个名为col1,col2的列,col3,col4等,它们将存储上表中的列; 但是,问题是如果要存储多个表并且只有1个TARGET表(ENTITY_VERSIONS)来存储所有表的版本,我该如何设计TARGET表?
或者,对于每个需要版本控制的表,是否会有一个复制表的版本?
如果可以共享用于实现审计/版本控制的PostgreSQL触发器(和相关的存储过程)代码的一些指针,那将是额外的.
PS:我查看了在SQL Server中实现审计表的建议?并且有点像答案,除了我不知道OldValue和NewValue应该是什么类型的?
PPS:如果表使用SOFT DELETE(幻像删除)而不是HARD删除,那么您的任何建议都会改变吗?
我们正在积极开发模块,当我们将更改推送到生产站点时,通常需要进行一些配置更改.很高兴自动化这个...想法?
我们目前正在巩固数据库变更管理流程.我们运行在RedHat 5上运行的MySql 5.我选择LiquiBase作为工具,因为它是开源的,并允许我们在以后需要时扩展其功能.它似乎也是少数仍然活跃的免费项目之一.有没有人有使用LiquiBase或其他Db版本工具的经验?
公司背景:我们是一家提供7/24托管应用程序的SaaS公司.有许多实例运行同一数据库的不同版本,我们需要一种方法来管理部署过程,因为它开始失控.数据库有数百个表,我们通常每3个月发布一次.
在我支持的应用程序中,最近我对DB结构进行了一些更改.
我将更新发送给用户,但很难让他们保持最新状态.
有没有简单的方法来做到这一点?
允许用户跳过版本但仍然在他们安装的下一个版本中进行更新的东西.
我使用BlackFish数据库.
谢谢
所以我花了几个小时来浏览Web API版本控制的所有真正奇妙的建议.我最喜欢的一些,对于那些和我一样有趣的人,没有特别的顺序:
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
http://www.pluralsight.com/courses/web-api-design
http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api
因此,所有这些建议都非常有助于设计API本质上的"前端".我们可以对API调用进行版本控制......现在,我正在努力解决这个问题.
对于拥有多个产品(这是一个新产品)的公司来说,这是一个大量数据驱动的应用程序.一些需要长期支持API调用的大客户,一些希望获得最新版本的小客户.我们可以使用类似于里程碑/长期支持版本的API来管理.大.
但在实践中,这将变得非常混乱,非常快.我们一直在努力将我们自己的网站,beta内部/外部API,存储库层以及甚至是要启动的SDK分层.我们将每个版本分成不同的分支,但它是SAAS - 我们托管数据库.因此,我们不仅能够对API调用进行版本控制 - 而且还包括其下的所有内容.业务逻辑,存储库和数据库.我们甚至没有开始进行单元/集成测试.
因此,尝试并且可能失败只在这里提出一个问题.
是否有一个合适的模式来构建一个分层的,数据驱动的.NET应用程序来应对多个版本?
具体来说,数据库将如何更改以及如何构建通用堆栈以对其进行全部版本化.我的一些想法包括:
我们有相当数量的开发人员,无论我写了多少ace文档,实际上它只会在某些东西不起作用时被读取.因此,理想情况下,开发人员必须尽可能明显地明白这一点.
我正在使用 liquibase 3.5.3liquibase update在 MySql 5.5 上运行命令。我在下面changeSet创建了一个表,其中有一列Created_Time应该有一个默认值作为CURRENT_TIMESTAMP.
<changeSet author="authorName" id="AutoGeneratedId">
<createTable tableName="aTable">
<column autoIncrement="true" name="Id" type="INT">
<constraints primaryKey="true"/>
</column>
<column name="Code" type="VARCHAR(45)"/>
<column defaultValueComputed="CURRENT_TIMESTAMP" name="Created_Time" type="TIMESTAMP(19)"/>
</createTable>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
在触发 liquibase 命令时,它会引发异常
Unexpected error running Liquibase: Invalid default value for 'Created_Time' [Failed SQL: CREATE TABLE aTable (Id INT AUTO_INCREMENT NOT NULL, Code VARCHAR(45) NULL, Created_Time TIMESTAMP(19) DEFAULT NOW() NULL, CONSTRAINT PK_ATABLE PRIMARY KEY (Id))]
Liquibase 正在转换CURRENT_TIMESTAMP为NOW()可能导致此问题的原因。
有些人可以为我提供此问题的任何解决方案或替代方案吗?
我正在寻找版本控制数据库,并且遇到了关于如何执行此操作的常规文章(编码恐怖,代码颂歌等).这对我来说都很有意义,但是我正在尝试找一个能为我运行sql脚本的脚本运行器.所有这些文章都提到了自动运行它们的东西,但它们都没有提出任何建议.
有没有人知道运行这些脚本的任何工具?理想情况下,以下列方式工作:
可以作为自动化任务的一部分运行
编辑
开源
目标
CREATE TEMPORARY TABLE在不使用本机 SQL 的情况下调用Hibernate 中的语句。这意味着仅使用 HQL 或 Hibernate API。DROP完成后的临时表。(我知道没有必要,但我认为这样做是一个好习惯。)背景
Save,值必须保存在单个事务中。SELECT视图上的语句。UPDATE视图上的语句,它调用视图的INSTEAD OF触发器。(I)的值是4当用户显示 Web 表单时,(II)另一个用户将同一字段更新为5 (III)第一个用户更新该字段2并提交 Web 表单。最初提出的解决方案
stored-procedures hibernate transactions temp-tables database-versioning
我正在寻找用于大量记录或文件的简单版本控制系统(约5000万,未压缩的约100GB,已压缩的约20MB)。这些文件每个只有几千字节,并且具有唯一的ID,所以我不在乎它们是否存储在平面结构(表,目录...)中。平均而言,每条记录每月更改一次,但是大多数更改的差异小于千字节,因此应该易于压缩版本。但是,对于每个版本只有一个条目的朴素数据库将增长得太快。我需要执行以下操作:
简而言之,我正在寻找用于简单记录或文件的类似Wiki的软件。
我考虑了可能的解决方案:
将文件放在版本控制系统中。这为我提供了复制和许多可用的访问工具,因此这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大。是否有人使用Subversion成功完成类似任务?
在数据库或文件系统中实现我自己的版本控制。我可能只需要存储压缩的记录和差异,就可以进行更多的工作并学到一些东西。如果只是为了娱乐,这将是我的首选解决方案。
使用版本控制文件系统。这将使设置,复制和访问更加困难。可能我需要在文件系统上方实现自己的访问API。
使用版本控制数据库系统。你能建议一些吗?
使用其他现有数据存储进行版本控制(MediaWiki?,Amazon Cloud Drive?,...)
显然有很多路径。其他人成功使用了哪些路径来获取相似或更大数量的数据?
假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只用主键 (int) 创建,称为 Id。然后,为了保持整洁,我将它们分成不同的项目并为两者创建 FluentMigrations,它们将驻留在Book.Migrations.dll和 中Cup.Migrations.dll。
现在我意识到也许我的书应该可以有一个名字,并创建一个新的迁移来添加一个名为 name 的列。我将此版本设置为 201408111220(因此是撰写本文时的时间戳),并将其称为 AddNameToBook。我应用此迁移并相应地更新数据库。
然后我意识到也许杯子应该有颜色。所以我在另一个项目中创建了一个新的迁移,版本为 201408111221,并将其命名为 AddColorToCup。我再次运行迁移,并更新数据库。
据我所知,到目前为止一切正常。我不确定的是,如果我现在向 Book 添加另一个迁移,例如 201408111224,应用它,然后尝试回滚。由于现在201408111221来自另一个程序集的版本存在于 VersionInfo 表中,FluentMigrator 将如何处理这个?它会在我面前抛出错误,还是因为当前程序集对它一无所知而只是忽略该行?
也欢迎其他关于以这种方式使用 FluentMigrator 的评论(一个数据库有多个程序集)。
database ×4
versioning ×3
c# ×2
deployment ×2
asp.net ×1
audit ×1
blackfish ×1
delphi ×1
e-commerce ×1
hibernate ×1
liquibase ×1
magento ×1
mysql ×1
php ×1
postgresql ×1
sql ×1
temp-tables ×1
transactions ×1