用于创建我的 PostgreSQL 数据库的 DDL/SQL 脚本处于版本控制之下。理论上,对数据库模型的任何更改都会在源代码存储库中进行跟踪。

然而,在实践中,实时数据库的结构会发生“动态”更改,如果任何客户端脚本无法插入/选择/等数据,我将负责解决问题。

如果我可以运行一个快速测试来验证数据库仍然对应于 repo 中的创建脚本,这将极大地帮助我,即仍然是“官方”版本。

为此,我开始使用 pgTAP,到目前为止,效果很好。然而,每当对数据库进行受控的、批准的更改时,测试脚本也需要更改。

因此,我考虑自动创建测试脚本。一种通用方法可能是

  • 运行脚本以创建数据库
  • 访问服务器上的数据库元数据
  • 使用该元数据生成测试代码

  • 我宁愿不必创建数据库,而是直接读取数据库创建脚本。我试图用谷歌搜索一种方法来利用 DDL 解析器并获得某种我可以使用的元数据表示,但到目前为止,我已经了解了很多关于 PostgreSQL 内部的知识,但无法真正找到解决问题的方法。

    有人能想出一种方法来解析 PostgreSQL DDL 脚本吗?

    最佳答案

    这里有很多数据库元数据需要关注。几年来,我一直在研究相关的数据库内部结构,我不会认为您正在考虑构建的项目是可行的,而无需倾销几个月的编程时间只是为了获得一个粗略的 alpha 质量工具来处理一些您担心支持的特定更改子集。如果这很容易,那么将不会有一个长期存在(例如:人们已经想要它十年了)将 DDL Triggers 构建到数据库中的开放项目,这正是您希望在这里拥有的东西。

    在实践中,人们使用两种流行的技术来使这类问题更容易处理:

  • log_statement 设置为 'ddl' 并尝试解析它记录的更改。
  • 使用 pg_dump --schema-only 制作数据库结构的常规快照。将其置于版本控制之下,并使用其差异中的更改来查找您要查找的信息。

  • 实际上,采用其中任何一个并直接导出您想要的 pgTAP 脚本本身就是一个挑战。如果所做的更改足够小,您可能能够在某种程度上实现自动化。至少你会从一个合理大小的问题开始,从那个角度来解决。

    关于database - 如何利用 PostgreSQL DDL 解析器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6834031/

    10-12 18:25