Для восстановления базы данных из файла архива, созданного с помощью команды 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;
- Если вы восстанавливаете данные в новый кластер базы данных, убедитесь, что библиотека st_geometry.dll помещена в папку lib PostgreSQL. Дополнительные сведения о размещении библиотеки st_geometry см. в Создание базы геоданных в PostgreSQL на Linux или Создание базы геоданных в PostgreSQL на Windows.
- Создайте базу данных заново. Это можно сделать с помощью выражения 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; GRANT USAGE ON SCHEMA sde TO dataowners; GRANT USAGE ON SCHEMA sde TO editors; GRANT USAGE ON SCHEMA sde TO readers;
- Измените путь поиска для новой базы данных, чтобы включить схему sde.
ALTER DATABASE mypgdb SET SEARCH_PATH="$user",sde,public;
- Из командной строки восстановите схему public и данные, используя команду pg_restore. Запустите команду от имени учетной записи с правами суперпользователя, например, postgres или 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
- После завершения восстановления базы данных, проверьте ее, подключившись из ArcGIS Desktop и изучив данные.