Восстановление базы геоданных на PostgreSQL
Для восстановления базы данных из файла архива, созданного с помощью команды pg_dump, используйте команду pg_restore. Проверьте модели архивирования и восстановления заранее на тестовых базах данных.
При восстановлении базы геоданных или базы данных с установленным типом геометрии ST_Geometry, следует восстанавливать схемы в определенном порядке: сначала схему public, затем sde, затем остальные схемы.
Общие инструкции по восстановлению, такие как опции синтаксиса, см. в документации к PostgreSQL. Также, если у вас установлена система PostGIS, и вы используете хранилище геометрии, обязательно прочитайте документацию PostGIS по созданию резервных копий и восстановлению баз данных. Этот процесс может выполняться по-разному в зависимости от используемой вами версии PostGIS.
- В кластере PostgreSQL имена баз данных должны быть уникальны, поэтому, если вы восстанавливаете такой же кластер баз данных, необходимо удалить существующую базу данных.
dropdb –U sde mypgdb
- Если вы восстанавливаете данные в новый кластер, войдите в psql, снова создайте роль учетной записи sde и предоставьте ей права суперпользователя.
CREATE ROLE sde LOGIN ENCRYPTED PASSWORD '0shallpass' SUPERUSER INHERIT;
- Если вы восстанавливаете данные в новый кластер, снова создайте роли учетных записей для всех владельцев данных. Также вы можете заново создать роли редактора и роль "только для чтения", хотя для восстановления базы данных это не обязательно.
В следующем примере скрипт создает роли и группы владельца данных, редактора и роль "только для чтения", затем добавляет роли в соответствующие группы.
--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;
- Создайте базу данных заново. Это можно сделать с помощью выражения createdb в командной строке или выражения psql. Примечание:
Убедитесь, что новая база данных имеет те же свойства, что и та, которую вы восстанавливаете, включая имя, кодировку и владельца.
В следующем примере инструмент командной строки createdb используется для создания базы данных mypgdb с кодировкой UTF8, принадлежащей роли учетной записи sde и расположенной в табличном пространстве tblspgdb:
createdb –U sde –E UTF8 –D tblspgdb -O sde mypgdb
- Снова войдите в 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;
- Из командной строки восстановите схему public и данные, используя команду pg_restore. Запустите команду от имени учетной записи с правами суперпользователя, например, postgres или sde.Внимание:
Необходимо сначала восстановить схему public и ее содержание. Если вы этого не сделаете, некоторые пространственные данные не будут восстановлены. Затем восстановите схему sde. Если этого не сделать, пространственные индексы классов пространственных объектов не будут созданы заново.
Например, для восстановления схемы public из архива базы данных mypgdb1031.dump в базу mypgdb, выполните следующее:
pg_restore -U sde -d mypgdb -n public mypgdb1031.dump
- Затем, восстановите содержимое схемы sde.
pg_restore -U sde -d mypgdb -n sde mypgdb1031.dump
- И наконец, восстановите остальные схемы и данные.
pg_restore –U sde –d mypgdb mypgdb1031.dump
- Снова войдите в psql и измените путь для поиска восстановленной базы данных, включив схему sde.
ALTER DATABASE mypgdb SET SEARCH_PATH="$user",sde,public;
- После завершения восстановления базы данных, проверьте ее, подключившись из ArcGIS for Desktop и изучив данные.