首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移路径,以向后兼容的方式统一列名

迁移路径,以向后兼容的方式统一列名
EN

Database Administration用户
提问于 2020-05-17 15:10:19
回答 1查看 459关注 0票数 0

我们有几个列的命名模式(比如created/creation_date/create_date) / id/key,并希望统一它)。

我们也想用向后兼容的方式来做。我们希望能够与新代码一起运行旧代码,直到我们摆脱旧代码为止,如下所示:

代码语言:javascript
复制
ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

是一种彻底的改变。

表的视图(用于Postgresql)等列是否存在某种形式的混叠?

回答@CL (tnx表示提示!) https://www.postgresql.org/docs/12/ddl-generated-columns.html

生成的列不能直接写入。在INSERT或UPDATE命令中,不能为生成的列指定值,但可以指定关键字默认值。

因此,如果一个想法是保留列,直到您更新所有的报告脚本-这是好的。但是如果你想回回以前的应用程序版本--你运气不好(

目前我们正在Google上提供:https://cloud.google.com/sql/docs/postgres/db-versions和v12只在测试版。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-05-18 11:55:13

要做到这一点没有简单的方法,但我能想到的唯一方法是使用一层视图来保留旧名称。

创建两个模式,例如“旧”和“新”或类似的东西。

“新”模式包含具有新列(可能还有表)名称的真实表。拥有能够处理该问题的应用程序,将搜索_路径设置为仅新模式。

对于每个已重命名列的表(或者如果表本身被重命名),在“旧”模式中创建一个带有旧名称的视图。

代码语言:javascript
复制
create view old.table_name
as
select new_column_name as column_name,
       some_other_column
from table_name;

此视图将自动更新,无需为其编写触发器。

创建只能处理旧名称的应用程序,将其search_path设置为old, new。然后,对table_name的非限定引用将使用视图old.table_name和代码所期望的列。由于视图是可更新的,这将同样适用于DML。

显然,如果应用程序代码出于某种原因检查真实表的存在,这将无法工作。或尝试检测这些表的约束。

它还要求您可以在连接到数据库时更改搜索路径(例如,在使用JDBC时,可以通过在连接URL中传递它来实现这一点)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/267332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档