在生产数据库中减少列大小并修剪数据,处理同一列上的约束/依赖关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在生产数据库中减少列大小并修剪数据,处理同一列上的约束/依赖关系相关的知识,希望对你有一定的参考价值。

我有一个场景,Java开发人员已经对变量进行了更改,该变量用于从列-col-table-tbl传输数据。现在,我必须将列varchar(15)更改为varchar(10)。但是,在进行此更改之前 - 必须处理现有数据和相同列上的约束/依赖项。

这样做的最佳顺序应该是什么?我想首先检查约束,然后修剪现有数据,然后更改表。请建议如何处理约束/依赖关系,并在处理之前,如何检查这些依赖关系。

答案

模式演化(随着时间的推移发生在数据库中的表和列中的DDL变化,同时保留现有的数据和功能)是一个很好理解的主题,有几个解决方案,其中一些是独立于RDBMS的,另一些是内置于RDBMS的解。

生产环境的一个关键要求是需要前向更改和后退,这些都可以在无人值守的情况下运行。

许多开源倡导者使用Liquibase,它也有商业变体。

适用于Linux / Unix / Windows的Db2还提供了一个内置的存储过程SYSPROC.ALTOBJ,它有助于自动化各种模式演变更改,包括减小列的大小。您需要仔细研究其文档并在非生产环境中对其进行全面测试,直到您满意为止。在这里阅读https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0011934.html

您可以使用您喜欢的任何语言(包括SQL)来扩展您自己的脚本,但请记住,您还应该构建并测试一个回退脚本。

以上是关于在生产数据库中减少列大小并修剪数据,处理同一列上的约束/依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

Pandas Groupby:同一列上的聚合,但总计基于两个不同的标准/数据框

Python希望增加一个数组元素,并增加同一列上的所有数组元素

同一列上的多个索引

SQL Server:为啥不区分大小写的列上的 SELECT 比区分大小写的列更快?

具有特定列上的子列的数据网格视图

具有别名的同一列上的多个连接