2013-03-13 126 views
1

我有一些使用PostgreSQL数据库的项目,它使用了19个存储过程(函数)和大约70个视图。如何自动postgress导入和导出功能和视图

现在,我们对活动数据库做了一些更新,并且由于postgres的限制,需要删除并重新创建所有函数和视图,因此功能发生了变化,因此我们花了相当长的时间来完成这些工作。

是否有一种自动方式来改变函数和视图在postgress中的方式,它需要关心依赖关系并按正确的顺序执行。

我们有再创建上层的意见......它有点复杂的数据库,至少对我来说:)

感谢

回答

2

我认为这样做最简单的方法是将备份的基本观点数据库到文本文件:

pg_dump database_name > database_name.pg_dump 

它们将处于正确的依赖关系顺序,否则从备份恢复数据库将很困难。您可以在备份文件中编辑功能和查看定义,并将其恢复到新数据库。

如果数据库备份文件太大而无法在编辑器进行编辑,从Postgres的9.2,可以将其分为3个部分:

pg_dump --section=pre-data > database_name.1.pg_dump 
pg_dump --section=data > database_name.2.pg_dump 
pg_dump --section=post-data > database_name.3.pg_dump 

你只编辑的第一部分,这将是小。在旧版本中,您可以使用例如split实用程序。

如果您无法承担备份和恢复所需的停机时间,它会变得更加棘手。但我仍然建议使用备份文件。请记住,Postgres在事务中支持DDL - 如果您在事务中导入函数和视图并出现错误,则可以简单地回滚所有更改,进行更正并再次尝试。

0

没有“简单”的方法。最好的方法是首先准备好IMO,然后设置一种使用SQL脚本和版本控制的方法。

我们在LedgerSMB中做的是我们将函数定义保存在一系列.sql文件中,这些文件在subversion中进行跟踪。然后我们有一个脚本来重新加载它们。如果你之前没有这样做,这将需要一些工作来设置。要做到这一点最简单的方法是:

pg_dump -s > ddl_statements_for_mydb.sql 

然后你可以复制/粘贴功能定义(CREATE变化要创建或替换,或添加DROP IF EXISTS如适用)。然后你会想要模块化成可用的块,并有一个脚本将所有块按照正确的顺序重新加载到你的数据库中。现在设置一切的时间和精力将会节省很多次,因为您可以将可预测的变更应用到测试,分期和生产帐户,而无需明显的停机时间(甚至可能根本没有停机时间,具体取决于如何你构造它)。