【问题标题】:How to mass replace structure in PostgreSQL database schema?如何批量替换 PostgreSQL 数据库模式中的结构?
【发布时间】:2012-01-24 23:34:35
【问题描述】:

我希望 PostgreSQL 专家可以帮助解决这个问题;)为了避免责任问题,我们被要求将数据库中“患者”一词的所有实例替换为“客户”模式强>。但是,我们确实使用 PGAdmin。

问题:我们的数据库“人”目前正在休假。

鉴于这不是一个小改动,那么更改架构和最大程度地减少中断的最有效和最有效的方法是什么? PGAdmin 是否有效地执行此操作,还是我需要走 SQL 路线?

谢谢!

【问题讨论】:

  • 这似乎是一件必须要做的事。我希望有人有一个好的答案,但我对它的为什么比对答案更感兴趣。
  • @WayneConrad 我们的一位客户大量参与了开发并被用作参考案例。鉴于他们的服务为癌症治疗提供交通工具,他们要求我们更改代码和文档中的所有术语,以便与实际医疗实践无关。
  • @WayneConrad p.s.喜欢对 dilbert 的引用;)
  • 谢谢。也感谢您提出有趣的问题。

标签: postgresql pgadmin


【解决方案1】:

Postgresql 能够更改列名和表名:

alter table patients rename to clients;
alter table visits rename column patient_id to client_id;

您可以将这些更改分组到一个事务中,这样所有更改要么同时发生,要么根本不发生:

begin;
alter table this...
alter table that...
...
commit;

数据库有使用它们的程序,这些程序经常与模式中的名称相关联。您的客户端程序是否会自动适应架构更改?

【讨论】:

  • 谢谢!是的,我们可以使我们的客户端软件适应模式更改,幸运的是,无需更改数据,只需更改模式即可。这将在本地进行测试,然后通过数据库演化和 GIT 推送。
  • 注意视图、存储函数和触发器中使用的表名和列名。
【解决方案2】:

如果您有条件,一个非常简单的方法是使用sed 和pg_dump:

pg_dump -s [arguments to connect to your database] | sed 's/patient/client/g' > new_structure.sql

这(可能)为您提供了一个新架构,该架构将“患者”的每个实例都更改为“客户端”,但它对您的数据没有多大作用,因此您必须单独转储和加载数据,您可能无法轻松做到这一点。 Wayne 的答案更好,但无论哪种方式,您都可能需要同时进行大量的应用程序更改来协调。

如果可能的话我会延迟,这不是你应该掉以轻心的改变。

【讨论】:

  • 幸运的是,我可以在本地测试所有内容,然后使用 GIT 推送更改。我同意我可能会采用 Wayne 的方法,但如果我对 PGSQL 更有经验,我可能会走这条路。谢谢!
  • 修正:我还意识到 Wayne 的方法在数据库演进中会更容易管理,因为更改可以分开,但贡献帮助我学习!
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2019-05-11
  • 2010-10-09
  • 1970-01-01
  • 2012-01-03
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多