是否可以将 Postgres 的 RENAME COLUMN 与 QueryDSL 结合使用,而无需应用程序停机?

问题描述 投票:0回答:1

我们有一个使用 QueryDSL 的 Java 应用程序,用于使用 Postgres 管理 SQL 查询。我们希望以最有效的方式简单地重命名列。 在 Postgres 中这很简单:

ALTER TABLE my_table RENAME COLUMN old_name TO new_name;

为了在应用程序不停机的情况下完成这项工作,我希望能够执行以下操作:

  1. 代码更改应用程序部署 - 让 QueryDSL 对
    old_name
    new_name
    (在 SELECT 和 INSERT/UPDATE 中)感到满意
  2. 数据库迁移以重命名列,如上所述。
  3. 代码更改应用程序部署 - 删除所有对
    old_name
    的引用。

但是我不知道是否有任何方法可以使用 QueryDSL 实现步骤 1。例如。某种注释或行为仅使用

old_name
new_name
(如果存在),否则使用另一个。

这有可能吗?

如果没有,看起来实现简单的数据库列重命名的唯一方法是完全复制该列,跨迁移数据,使应用程序写入两者,然后最终删除旧的列。当然有更简单的方法!

java sql postgresql querydsl
1个回答
0
投票

看起来答案是否定的,这对于 QueryDSL 来说是不可能的。所以唯一的方法是:

  1. 创建一个新列
  2. 写入两列
  3. 将旧列的数据回填到新列
  4. 将读数从旧列移动到新列
  5. 停止写旧专栏
  6. 删除旧列

来源:https://github.com/ankane/strong_migrations?tab=readme-ov-file#renaming-a-column(Ruby on Rails gem,但原则普遍适用。)

© www.soinside.com 2019 - 2024. All rights reserved.