如何使用注释对PostgreSQL模式进行版本控制?


9

我使用Git控制大部分工作:代码,文档,系统配置。之所以能够做到这一点,是因为我所有有价值的工作都存储为文本文件。

我也一直在为Postgres数据库编写和处理许多SQL模式。该模式包括视图,SQL函数,我们将使用R编程语言(通过PL / R)编写Postgres函数。

我试图复制和删除我和我的协作者编写的块模式,但是我忘记这样做了。复制和过去操作是重复的,并且容易出错。

pg_dump / pg_restore方法将不起作用,因为它会丢失注释。

理想情况下,我希望有某种方法可以将当前模式提取到一个或多个文件中并保留注释,以便进行版本控制。

带有注释的版本控制架构的最佳实践是什么?


2
我不认为问题是特定于psql的。你读过一些在SO答案stackoverflow.com/...?可能有一些适合您的东西。
DrColossos

@DrColossos-其中一些问题是好的移民候选人。
CoderHawk 2011年

@DrColossos COMMENT ON在非postgres环境中可用吗?我认为这不是标准的SQL。这意味着这可能是特定于Postgres的。
xenoterracide

@xenoterracide您说得对,我更多是在谈论数据库本身的版本控制问题
DrColossos 2011年

Answers:


9

为什么不COMMENT ON使用各种SCHEMA组件,那样您的注释就会出现在架构中,并且会被转储。

COMMENT存储有关数据库对象的注释。
要修改注释,请对同一对象发出新的COMMENT命令。每个对象仅存储一个注释字符串。要删除注释,请在文本字符串的位置写入NULL。放置对象时,注释将自动删除。


确实有帮助,但是我现在还不想将其标记为“答案”,因为我希望获得最佳实践答案。
2011年

2

版本控制模式对我来说一直是个问题。我通常会对由我使用的数据建模工具生成的架构进行版本控制。该模型也是受版本控制的。我使用当前和先前架构之间的差异来构建更新架构所需的补丁。一些建模工具会创建可用的架构更新脚本。更新脚本也受版本控制。

我偶尔会看到旨在以适合于重新生成架构的格式转储架构的脚本。您可能正在寻找其中之一。一些建模和查询工具能够从现有架构中创建架构再生脚本。如果可以对此编写脚本,则可能会为您提供适合版本控制的文件。


2

我先前的建议的一种替代方法(或可以将它们组合在一起)是在编辑器(IDE)中编写SQL代码,然后保存文件,然后将它们提交到VCS,然后使用在数据库上运行代码psql -1f。这样,代码在执行之前就受到版本控制。


“通过这种方式,代码可以在执行之前进行版本控制。” 它应该是。
Mike Sherrill'Cat Recall'11

@catcall是的,但是如果您阅读了ops帖子,我认为情况并非如此。
xenoterracide

不幸的是,在我所见过的大多数地方并非如此。但这是确保测试和质量检查代码与生产环境中的代码相同的唯一方法。“真正的”数据库位于VCS中而不在DBMS中的想法并不普遍。
Mike Sherrill'Cat Recall'

0

我在类似的项目中工作。这是我的设计建议:

  1. 注释数据库对象定期每两个星期或每月两次说。
  2. pg_dump all(是的,请确保得到所有小的细节和关系)。用yyyymmdd-VERSION.dump命名
  3. 如果使用Git,请使用大文件插件
  4. 如果不使用仓库,则创建一个文本格式为.CSV的简单表格,如下表所示:

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. 通过按文件名在生成的转储的CSV文件中保持关系,您可以以某种方式轻松地跟踪它们,并确保还原将正常进行,因为您转储了所有内容。

如今,即使谈论TB数据,任何云存储或站点存储都不应如此昂贵。从700美元到1000美元,最高可达16 TB

如果您迁移到像最流行的一种AWS S3那样的存储云,甚至可以节省更多资金。

如果定义了一个好的设计和组织的标准来跟踪所有IT基础架构和资产,那么一旦实现,就不会感到痛苦,它可以相对简单,并且可以节省配置的麻烦,最重要的是节省时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.