将地理数据库恢复到 PostgreSQL

要从使用 pg_dump 命令创建的存档文件恢复数据库,可使用 pg_restore 命令。请确保使用测试数据库对备份和恢复模型进行测试。

使用安装的 ST_Geometry 恢复地理数据库或数据库时,必须以特定顺序恢复方案:首先恢复公共方案,然后恢复 sde 方案,接下来恢复其余的方案。

关于常规恢复说明的信息(如语法选项),请参阅 PostgreSQL 文档。此外,如果安装了 PostGIS 并在使用 Geometry 存储,请务必阅读有关创建备份和恢复数据库的 PostGIS 文档。此过程会因使用的 PostGIS 版本的不同而有所不同。

  1. PostgreSQL 数据库群集中的数据库名称必须唯一;因此,如果要恢复到同一个数据库群集,必须删除现有数据库。
    dropdb –U sde mypgdb
    
  2. 如果要恢复到新的数据库群集,请登录到 psql,重新创建 sde 登录角色,并授予其超级用户权限。
    CREATE ROLE sde LOGIN 
      ENCRYPTED PASSWORD '0shallpass'
      SUPERUSER INHERIT;
    
  3. 如果要恢复到新的数据库群集,请为所有数据所有者重新创建登录角色。尽管恢复数据库不是必需操作,但您也可以在此情况下重新创建编辑者和只读登录角色。

    以下示例脚本将创建数据所有者、编辑者和读者登录角色和组,并将登录角色添加到对应的组中。

    --Re-create dataowners group and login roles.
    CREATE ROLE dataowners
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE owner1 LOGIN
      ENCRYPTED PASSWORD 'pw.4.owner1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT dataowners TO owner1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4.owner2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT dataowners TO owner2;
    
    --Re-create editors group and login roles.
    CREATE ROLE editors
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE editor1 LOGIN
      ENCRYPTED PASSWORD 'pw.4editor1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT editors TO owner1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4editor2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT editors TO editor2;
    
    --Re-create readers group and login roles.
    CREATE ROLE readers
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    
    CREATE ROLE reader1 LOGIN
      ENCRYPTED PASSWORD 'pw.4reader1'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT readers TO reader1;
    
    CREATE ROLE owner2 LOGIN
      ENCRYPTED PASSWORD 'pw.4reader2'
      NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
    GRANT readers TO reader2;
    
  4. 重新创建数据库。您可以在命令行使用 createdb 语句或 psql 语句来完成此操作。
    注注:

    确保新数据库与将恢复的数据库的名称、编码和所有者属性相同。

    以下示例将使用 createdb 命令行工具创建 UTF8 编码的数据库 mypgdb,该数据库属于 sde 登录角色,位于表空间 tblspgdb 中:

    createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
    
  5. 重新登录到 psql,然后创建由新数据库中的 sde 登录角色所拥有的 sde 方案。为需要访问地理数据库的所有登录角色或组授予使用 sde 方案的权限。
    CREATE SCHEMA sde
      AUTHORIZATION sde;
    
    GRANTE USAGE ON SCHEMA sde TO dataowners;
    GRANTE USAGE ON SCHEMA sde TO editors;
    GRANTE USAGE ON SCHEMA sde TO readers;
    
  6. 在命令行中,使用 pg_restore 命令恢复公共方案和数据。以具有超级用户权限的登录用户身份(如 postgres 或 sde 用户)运行命令。
    警告警告:

    必须首先恢复公共方案及其内容。如果不执行此操作,将无法恢复某些空间数据。接下来,恢复 sde 方案。如果不执行此操作,将不会在要素类上重新创建空间索引。

    例如,要将名为 mypgdb1031.dump 的数据库备份文件的公共方案恢复到数据库 mypgdb,请运行以下命令:

    pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
    
  7. 接下来,恢复 sde 方案的内容。
    pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
    
  8. 最后,恢复其余的方案和数据。
    pg_restore –U sde –d mypgdb mypgdb1031.dump
    
  9. 重新登录到 psql,然后更改已恢复数据库的搜索路径,以包含 sde 方案。
    ALTER DATABASE mypgdb
      SET SEARCH_PATH="$user",sde,public;
    
  10. 完成数据库恢复后,从 ArcGIS for Desktop 连接到数据库并检查数据,以测试数据库。

相关主题

5/10/2014