使用备份文件可以将现有 PostgreSQL 企业级地理数据库从本地服务器移至 ArcGIS Enterprise on Amazon Web Services 实例,或者从一个 ArcGIS Enterprise on Amazon Web Services 实例移至另一个。
为此,源和目标 PostgreSQL 数据库集群必须兼容,才能使用 pg_dump 文件来传输数据库。请参阅 PostgreSQL 文档以查看您所使用的版本是否兼容。
如果您的 PostgreSQL 版本兼容,请为源地理数据库创建备份,将备份文件传输至目标 ArcGIS Enterprise on Amazon Web Services 实例,在目标 PostgreSQL 数据库集群中创建数据库和登录角色,然后恢复该数据库。
注:
此工作流不适用于 Amazon Relational Database Services for PostgreSQL。
检查自定义变量设置
必须将源数据库集群中要保留的任何自定义设置添加到新的数据库集群中。配置设置存储在 postgresql.conf 文件中。创建该文件的副本并将其移至 ArcGIS Enterprise on Amazon Web Services 实例上的目标数据库集群。
可在挂载驱动器的 /data 中找到 ArcGIS Enterprise on Amazon Web Services 实例上的 postgresql.conf 文件。
为源地理数据库创建备份
您可以通过为数据库创建备份将数据文件传输至 ArcGIS Enterprise on Amazon Web Services 实例。
可以使用 PostgreSQL pg_dump 命令来创建转储文件。
- 连接到存储源地理数据库的服务器。
- 在 shell 命令提示符处执行 pg_dump 命令来为数据库创建备份。
pg_dump -U postgres -F c > /data/spdbbu11012.dump
有关 pg_dump 命令的详细信息,请参阅 PostgreSQL 文档。
将备份文件移动至目标实例
可通过一些方法将转储文件传输至目标实例。有关移动数据的不同选择,请参阅向 Amazon Web Services 传输数据的策略。如有必要,可以使用相同的方法移动 postgresql.conf 文件。
确保将转储文件放置在弹性块存储 (EBS) 卷上。
转储文件位于目标 ArcGIS Enterprise on Amazon Web Services 实例上后,准备 PostgreSQL 数据库集群。
准备目标 PostgreSQL 数据库集群
您必须拥有在其中恢复转储文件的数据库。并且,源数据库中任何拥有数据的登录角色必须存在于目标数据库集群中。
替换配置文件
如果要使用自定义的 postgresql.conf 文件,请在目标实例上创建默认 postgresql.conf 文件的备份,并将自定义文件放置在挂载驱动器的 /data 中。
创建空数据库
您所创建的数据库名称必须与您创建转储文件的源 PostgreSQL 数据库集群中的数据库名称一致。在同一数据库集群中,数据库名称必须是唯一的。这意味着如果您将数据库从 ArcGIS Enterprise on Amazon Web Services 移动至另一个,则必须符合以下条件之一:
- 您的源数据库不能与目标数据库集群上的数据库具有相同名称。
或者
- 在恢复传输的备份文件之前,您必须从目标 PostgreSQL 数据库集群删除重名的数据库。
- 以根用户身份登录到目标 EC2 实例。
- 打开 shell 命令并以 sde 用户身份登录 psql。
- 创建在其中恢复转储文件的数据库。
请记住以下信息:
- 目标数据库的名称、所有者和编码必须与源数据库的名称、所有者和编码相同。
- 如果针对源数据库使用了非默认数据库模板(例如 PostGIS 数据库模板),则针对目标数据库应使用相同模板。
- 可以将新数据库存储在现有表空间中,或者专门为此数据库创建一个新的表空间。如果想要使用新的表空间,您必须在创建数据库之前创建表空间。
CREATE DATABASE <dbname> WITH OWNER = sde TEMPLATE = template0 ENCODING = '<encoding of db>' TABLESPACE = LC_COLLATE = '' LC_CTYPE = '' CONNECTION LIMIT = -1;
创建登录角色和组角色
目标数据库集群必须包含每个用户(在源数据库中拥有数据)的登录角色。
如果您将数据库从一个 ArcGIS Enterprise on Amazon Web Services 实例移至另一个,并且采用默认的登录角色,则无需在目标数据库集群中创建新的角色。但是,如果源数据库中的数据为非默认登录角色所有,您必须创建与目标 PostgreSQL 数据库集群中的登录角色同名的登录角色。同样地,如果想要使用目标数据库中的组登录,您必须重新创建组登录并将其授予给登录角色。
有关创建组角色和登录角色以及向组中添加登录帐户的信息,请参阅 PostgreSQL 文档。
恢复数据库
使用 PostgreSQL pg_restore 命令来恢复数据库。
警告:
您必须运行两次 pg_restore 命令:一次用于恢复包含 sde_spatial_references 系统表的公共方案,另一次用于恢复其余的数据。如果未执行此操作,则无法恢复空间数据。
- 连接至目标 ArcGIS Enterprise on Amazon Web Services 实例(您将转储文件移动至其中的实例)。
- 打开 shell 命令并以 sde 用户身份登录 psql。
- 在 shell 命令提示符处执行 pg_restore 命令以在数据库中恢复公共方案。
执行 pg_restore 命令的 sde 用户必须是 PostgreSQL 中的超级用户。
pg_restore -U sde -n public -d spdb /data/spdbbu11012.dump Password:
- 再次执行 pg_restore 命令以恢复整个数据库。
pg_restore -U sde -d spdb /data/spdbbu11012.dump Password:
有关 pg_restore 命令的详细信息,请参阅 PostgreSQL 文档。
在目标 PostgreSQL 数据库集群上恢复数据库之后,检查以确保新的数据库中存在您期望的方案和表。为此,查询存储该信息的 PostgreSQL 目录视图。例如,您可以查询 pg_tables 目录视图以查看数据库中的所有表和存储表的方案。
设置数据库变量
接下来,您将使用之前收集的自定义数据库变量信息在新的数据库中设置变量。
这些步骤将指示您如何添加和设置 search_path 变量。设置其他数据库变量的自定义值将采用相同的基本步骤。
- 以 sde 用户身份从 psql 连接到新的数据库。
- 使用 psql 提示符,为包含 sde 方案的数据库设置搜索路径。
SET search_path TO "$user",public,sde;