标签: database-versioning

如何在PostgreSQL上实现表修改的审计/版本控制

我们在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删除,那么您的任何建议都会改变吗?

database versioning postgresql audit database-versioning

7
推荐指数
1
解决办法
5382
查看次数

Magento:如何将配置更改从开发环境迁移到生产环境?

我们正在积极开发模块,当我们将更改推送到生产站点时,通常需要进行一些配置更改.很高兴自动化这个...想法?

php deployment database-versioning magento e-commerce

7
推荐指数
2
解决办法
1726
查看次数

数据库变更管理工具?

我们目前正在巩固数据库变更管理流程.我们运行在RedHat 5上运行的MySql 5.我选择LiquiBase作为工具,因为它是开源的,并允许我们在以后需要时扩展其功能.它似乎也是少数仍然活跃的免费项目之一.有没有人有使用LiquiBase或其他Db版本工具的经验?

公司背景:我们是一家提供7/24托管应用程序的SaaS公司.有许多实例运行同一数据库的不同版本,我们需要一种方法来管理部署过程,因为它开始失控.数据库有数百个表,我们通常每3个月发布一次.

database deployment database-design database-versioning

6
推荐指数
1
解决办法
1878
查看次数

是否有任何工具或API来自动更新数据库结构

在我支持的应用程序中,最近我对DB结构进行了一些更改.

我将更新发送给用户,但很难让他们保持最新状态.

有没有简单的方法来做到这一点?

允许用户跳过版本但仍然在他们安装的下一个版本中进行更新的东西.

我使用BlackFish数据库.

谢谢

database delphi database-versioning blackfish

6
推荐指数
1
解决办法
873
查看次数

构建用于版本控制的Web API堆栈

所以我花了几个小时来浏览Web API版本控制的所有真正奇妙的建议.我最喜欢的一些,对于那些和我一样有趣的人,没有特别的顺序:

API版本控制的最佳实践?

ASP.NET MVC应用程序的REST 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应用程序来应对多个版本?

具体来说,数据库将如何更改以及如何构建通用堆栈以对其进行全部版本化.我的一些想法包括:

  • 更新堆栈的旧源控制分支并部署这些分支
  • 将所有内容保存在同一个项目中,但始终使用文件夹/命名空间
  • 进一步拆分项目 - 所以API解决方案有许多"Controller"项目,逻辑/ repo层的概念类似

我们有相当数量的开发人员,无论我写了多少ace文档,实际上它只会在某些东西不起作用时被读取.因此,理想情况下,开发人员必须尽可能明显地明白这一点.

c# versioning asp.net database-versioning asp.net-web-api

6
推荐指数
1
解决办法
1401
查看次数

Liquibase - 将 defaultValueComputed 作为 CURRENT_TIMESTAMP 添加到时间戳列

我正在使用 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_TIMESTAMPNOW()可能导致此问题的原因。

有些人可以为我提供此问题的任何解决方案或替代方案吗?

mysql database-versioning liquibase

6
推荐指数
2
解决办法
9457
查看次数

需要.NET数据库版本控制脚本运行器

我正在寻找版本控制数据库,并且遇到了关于如何执行此操作的常规文章(编码恐怖,代码颂歌等).这对我来说都很有意义,但是我正在尝试找一个能为我运行sql脚本的脚本运行器.所有这些文章都提到了自动运行它们的东西,但它们都没有提出任何建议.

有没有人知道运行这些脚本的任何工具?理想情况下,以下列方式工作:

  1. 运行事务中的所有内容,因此如果任何单个更新失败,整个过程就会失败
  2. 我可以控制方案版本数据库表的名称
  3. 能够拥有一系列在升级时始终运行的脚本
  4. 可以作为自动化任务的一部分运行

    编辑

  5. 开源

sql database versioning database-versioning

5
推荐指数
2
解决办法
1245
查看次数

如何在 Hibernate 中创建临时表?

目标

  1. CREATE TEMPORARY TABLE在不使用本机 SQL 的情况下调用Hibernate 中的语句。这意味着仅使用 HQL 或 Hibernate API。
  2. 将对象保存到临时表。
  3. 调用一个使用现有表和临时表的存储过程。
  4. DROP完成后的临时表。(我知道没有必要,但我认为这样做是一个好习惯。)

背景

  1. 我对 SQL 非常熟悉,但对 Hibernate 不熟悉。
  2. 由于某人的决定,我被迫在项目中使用 Hibernate。
  3. 我要将 Web 表单保存到 Oracle 数据库。
  4. Web 表单包含一个充满文本字段(由其他人设计)的表格,每个单元格中都有一个。
  5. 当用户单击 时Save,值必须保存在单个事务中。
  6. Web 表单由数据库视图支持。
  7. 数据库视图是使用 EAV 模式从数据库表创建的。(这样做是因为列在某种程度上是动态的。)
  8. Web 表单中的每个文本字段都由数据库表中的一行建模。
  9. 显示 Web 表单使用SELECT视图上的语句。
  10. 更新 Web 表单使用UPDATE视图上的语句,它调用视图的INSTEAD OF触发器。
  11. 仅更新更改的值。每个更新都有一个审计跟踪。
  12. 如果其他用户在没有通知的情况下更新了任何值,则事务将回滚。以下是此类场景的示例:a(I)的值是4当用户显示 Web 表单时,(II)另一个用户将同一字段更新为5 (III)第一个用户更新该字段2并提交 Web 表单。

最初提出的解决方案

  1. 使用 AJAX (jQuery) 检测文本字段中的更改,并仅提交用户更改的内容。
  2. 但是,需要在数据库中检测其他用户所做的更改。 …

stored-procedures hibernate transactions temp-tables database-versioning

5
推荐指数
1
解决办法
1万
查看次数

简单的版本控制系统或版本控制文件系统或版本控制数据库

我正在寻找用于大量记录或文件的简单版本控制系统(约5000万,未压缩的约100GB,已压缩的约20MB)。这些文件每个只有几千字节,并且具有唯一的ID,所以我不在乎它们是否存储在平面结构(表,目录...)中。平均而言,每条记录每月更改一次,但是大多数更改的差异小于千字节,因此应该易于压缩版本。但是,对于每个版本只有一个条目的朴素数据库将增长得太快。我需要执行以下操作:

  • 基本的CRUD操作:创建,读取,更新,删除
  • 快速列出最近的变化
  • 快速列出特定记录的最新更改
  • 查询给定时间内的变化
  • 查询给定用户的更改(每个编辑都与某个用户ID关联,并且可以选择将提交消息作为注释)
  • 对于写操作,必须有一个提交钩子来验证和拒绝格式错误的记录。

简而言之,我正在寻找用于简单记录或文件的类似Wiki的软件。

我考虑了可能的解决方案:

  • 将文件放在版本控制系统中。这为我提供了复制和许多可用的访问工具,因此这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大。是否有人使用Subversion成功完成类似任务?

  • 在数据库或文件系统中实现我自己的版本控制。我可能只需要存储压缩的记录和差异,就可以进行更多的工作并学到一些东西。如果只是为了娱乐,这将是我的首选解决方案。

  • 使用版本控制文件系统。这将使设置,复制和访问更加困难。可能我需要在文件系统上方实现自己的访问API。

  • 使用版本控制数据库系统。你能建议一些吗?

  • 使用其他现有数据存储进行版本控制(MediaWiki?,Amazon Cloud Drive?,...)

显然有很多路径。其他人成功使用了哪些路径来获取相似或更大数量的数据?

version-control database-versioning

5
推荐指数
1
解决办法
1144
查看次数

在同一数据库上使用多个 FluentMigrator 程序集

假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只用主键 (int) 创建,称为 Id。然后,为了保持整洁,我将它们分成不同的项目并为两者创建 FluentMigrations,它们将驻留在Book.Migrations.dll和 中Cup.Migrations.dll

现在我意识到也许我的书应该可以有一个名字,并创建一个新的迁移来添加一个名为 name 的列。我将此版本设置为 201408111220(因此是撰写本文时的时间戳),并将其称为 AddNameToBook。我应用此迁移并相应地更新数据库。

然后我意识到也许杯子应该有颜色。所以我在另一个项目中创建了一个新的迁移,版本为 201408111221,并将其命名为 AddColorToCup。我再次运行迁移,并更新数据库。

据我所知,到目前为止一切正常。我不确定的是,如果我现在向 Book 添加另一个迁移,例如 201408111224,应用它,然后尝试回滚。由于现在201408111221来自另一个程序集的版本存在于 VersionInfo 表中,FluentMigrator 将如何处理这个?它会在我面前抛出错误,还是因为当前程序集对它一无所知而只是忽略该行?

也欢迎其他关于以这种方式使用 FluentMigrator 的评论(一个数据库有多个程序集)。

c# database-versioning fluent-migrator

5
推荐指数
1
解决办法
2470
查看次数