Восстановление баз данных postgreSQL из необработанных физических файлов - PullRequest
23 голосов
/ 22 июля 2010

У меня следующая проблема, и мне нужно знать, есть ли способ ее исправить.

У меня есть клиент, который был достаточно дешев, чтобы отказаться от покупки плана резервного копирования для его баз данных postgreSQL в основной системеэто управляет его компанией, и, как я думал, это когда-нибудь случится, некоторые файлы ОС потерпели крах во время отключения, и ОС необходимо переустановить.

У этого клиента не было резервных копий баз данных, но мне удалось сохранить основной каталог PostgreSQL.Я прочитал, что базы данных каким-то образом хранятся в каталоге данных главной папки postgres.

Мой вопрос: есть ли способ восстановить базы данных только из папки данных?Я работаю в среде Windows (XP с пакетом обновления 2) с PostgreSQL 8.2, и мне нужно переустановить PostgreSQL на новом сервере.Мне нужно будет воссоздать базы данных в новой среде и каким-то образом прикрепить старые файлы к новым экземплярам базы данных.Я знаю, что это возможно в SQL Server из-за способа, которым движок хранит базы данных, но я не знаю, что такое postgres.

Есть идеи?Они будут очень признательны.

Ответы [ 4 ]

20 голосов
/ 22 июля 2010

Если у вас есть вся папка данных, у вас есть все, что вам нужно (при условии, что архитектура одинакова). Просто попробуйте восстановить его на другом компьютере, прежде чем стирать его, если вы что-то не скопировали.

Просто сохраните каталог данных на диск. При запуске Postgres установите параметр, сообщающий, где находится каталог данных (см .: wiki.postgresql.org ). Или удалите исходный каталог данных новой установки и поместите копию на место.

5 голосов
/ 26 мая 2011

Это возможно, вам просто нужно скопировать папку «data» (внутри папки установки Postgres) со старого компьютера на новый, но есть несколько вещей, о которых следует помнить.

Прежде чем копировать файлы, вы должны остановить службу сервера Postgres.Итак, Панель управления-> Администрирование-> Сервисы, найдите сервис Postgres и остановите его.Когда вы закончите копирование файлов и настройку разрешений, запустите его снова.

Во-вторых, вам нужно установить разрешения для файлов данных.Поскольку сервер postgres фактически работает под другой учетной записью пользователя, он не сможет получить доступ к файлам, если вы просто скопируете их в папку данных, поскольку у него не будет разрешений для этого.Поэтому вам нужно изменить владельца файлов на пользователя "postgres".Мне пришлось использовать subinacl для этого, сначала установить его, а затем использовать его из командной строки, как показано ниже (сначала перейдите в папку, где вы его установили):

subinacl /subdirectories "C:\Program Files\PostgreSQL\8.2\data\*" /setowner=postgres

(смена владельцатакже должно быть возможно сделать это из проводника: сначала вы должны отключить «Использовать простой общий доступ к файлам» в параметрах папки, затем в диалоговом окне «Свойства папки» появится вкладка «Безопасность», и есть варианты для установки разрешений и смены владельца,но я не смог сделать это таким образом.)

Теперь, если служба сервера не может запуститься после того, как вы снова запустите ее вручную, обычно вы можете увидеть причину в средстве просмотра событий (Администрирование-> Просмотрщик событий).Postgres выдаст сообщение об ошибке, и проверка его даст вам понять, в чем проблема (иногда он будет жаловаться на файл postmaster.pid, просто удалить его и т. Д.).

0 голосов
/ 13 мая 2017

Вопрос очень старый, но я хочу поделиться эффективным методом, который я нашел.

Если у вас нет резервной копии с "pg_dump", а ваши старые данные - папка, попробуйте выполнить следующие действия.В базе данных Postgres добавьте записи в таблицу «pg_database».С помощью программы-менеджера или «вставить в».Сделайте необходимую проверку, измените следующий запрос вставки и выполните его.

Запрос вернет OID после того, как сработает.Создайте папку с именем этого номера.После того, как вы скопировали свои старые данные в эту папку, использование готово.



    /*
    ------------------------------------------
    *** Recover From Folder ***
    ------------------------------------------
    Check this table on your own system.
    Change the differences below.
    */
    INSERT INTO
      pg_catalog.pg_database(
      datname, datdba, encoding, datcollate, datctype, datistemplate, datallowconn,
      datconnlimit, datlastsysoid, datfrozenxid, datminmxid, dattablespace, datacl)
    VALUES(
                             -- Write Your collation  
      'NewDBname', 10, 6, 'Turkish_Turkey.1254', 'Turkish_Turkey.1254',
      False, True, -1, 12400, '536', '1', 1663, Null);

    /*
    Create a folder in the Data directory under the name below New OID.
    All old backup files in the directory "data\base\Old OID" are the directory with the new OID number
    Copy. The database is now ready for use.
    */
    select oid from pg_database a where a.datname = 'NewDBname';

0 голосов
/ 26 ноября 2014

Я так и делаю, но самой сложной задачей было изменить разрешение владельца:

  1. перейти к сервисам из инструментов администратора
  2. найти сервис postgres и дважды щелкнуть по нему
  3. при входе в систему перейдите на локальную систему
  4. , затем перезапустите
...