我需要使用我们客户的某个数据库作为模板创建几个新数据库。以下工作正常:
> CREATE DATABASE new_customer
> ENCODING 'LATIN1'
> LC_COLLATE 'pt_BR.ISO-8859-1'
> LC_CTYPE 'pt_BR.ISO-8859-1'
> TABLESPACE = new_customer_tablespace
> TEMPLATE old_customer
> OWNER = postgres
> ;
然而,我还需要"清洁"之后的新数据库,删除/重新创建几个 - 但不是全部 - 表,以便新客户不会看到旧的私人数据。目前,每个数据库花了我一段时间,我想知道是否有更简单的方法。
我考虑过创建这样一个模板,但是由于我需要让这个模板与我们对其他数据库所做的更改保持同步,所以每次我想要另一个数据库时我都要重新创建它。数据库,这首先打破了这样做的目的。
我还考虑使用--exclude-table-data=TABLE
选项从旧数据库创建转储。这样做的问题是首先需要转储,转储本身也会占用大量磁盘空间,方法是创建一个我必须在创建完成后擦除的文件。
有更好,更简单的方法吗?
我在AWS HREL 7实例上运行PostgreSQL 9.2。
答案 0 :(得分:0)
最好和最快的方法是创建模板数据库。
是的,每当您更改数据定义时,您都必须更新它,但您必须对所有现有数据库执行此操作,因此将更改应用于另一个数据库不应该受到伤害。< / p>
如果您想采用pg_dump
方式,请使用-s
选项进行转储,这样会更快。还有--exclude-table-data
选项可以仅为某些表排除数据,但对于许多表格来说这可能很麻烦。
答案 1 :(得分:0)
另一种方法是使用您希望已经拥有的备份。
使用自定义格式进行备份。如果需要还原数据库,可以创建备份索引(使用--list选项),在新数据库中取消选择不需要的项目,然后使用--use-list选项从备份中创建新数据库。
通过这种方式,您也可以确信您的备份有效,因为您偶尔会进行一次还原。
哦,这也适用于9.2版本。