Восстановление базы геоданных на PostgreSQL

Для восстановления базы данных из файла архива, созданного с помощью команды pg_dump, используйте команду pg_restore. Проверьте модели архивирования и восстановления заранее на тестовых базах данных.

Когда вы восстанавливаете базу данных или геоданных с типом геометрии ST_Geometry, необходимо восстанавливать схемы в определенном порядке: сначала следует восстановить схему public, затем sde, затем остальные.

Общие инструкции по восстановлению, такие как опции синтаксиса, см. в документации к PostgreSQL. Также, если у вас установлена система PostGIS, и вы используете хранилище геометрии или географии, обязательно прочитайте документацию 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. Если вы восстанавливаете данные в новый кластер базы данных, убедитесь, что библиотека st_geometry.dll помещена в папку lib PostgreSQL. Дополнительные сведения о размещении библиотеки st_geometry см. в Создание базы геоданных в PostgreSQL на Linux или Создание базы геоданных в PostgreSQL на Windows.
  5. Создайте базу данных заново. Это можно сделать с помощью выражения createdb в командной строке или выражения psql.
    Примечание:

    Убедитесь, что новая база данных имеет те же свойства, что и та, которую вы восстанавливаете, включая имя, кодировку и владельца.

    В следующем примере инструмент командной строки createdb используется для создания базы данных mypgdb с кодировкой UTF8, принадлежащей роли учетной записи sde и расположенной в табличном пространстве tblspgdb:

    createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
  6. Снова войдите в psql и создайте схему sde, принадлежащую роли учетной записи sde в новой базе данных. Предоставьте право пользователя в схеме sde всем остальным ролям учетных записей, которым необходим доступ к базе геоданных.
    CREATE SCHEMA sde
      AUTHORIZATION sde;
    GRANT USAGE ON SCHEMA sde TO dataowners;
    GRANT USAGE ON SCHEMA sde TO editors;
    GRANT USAGE ON SCHEMA sde TO readers;
  7. Измените путь поиска для новой базы данных, чтобы включить схему sde.
    ALTER DATABASE mypgdb
      SET SEARCH_PATH="$user",sde,public;
  8. Из командной строки восстановите схему public и данные, используя команду pg_restore. Запустите команду от имени учетной записи с правами суперпользователя, например, postgres или sde.
    Внимание:

    Необходимо сначала восстановить схему public и ее содержание. Если вы этого не сделаете, некоторые пространственные данные не будут восстановлены. Затем восстановите схему sde. Если этого не сделать, пространственные индексы классов пространственных объектов не будут созданы заново.

    Например, для восстановления схемы public из архива базы данных mypgdb1031.dump в базу mypgdb, выполните следующее:

    pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
  9. Затем восстановите содержимое схемы sde.
    pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
  10. И наконец, восстановите остальные схемы и данные.
    pg_restore –U sde –d mypgdb mypgdb1031.dump
  11. После завершения восстановления базы данных, проверьте ее, подключившись из ArcGIS Desktop и изучив данные.