резервная копия старой базы данных pg_restore - PullRequest
0 голосов
/ 06 сентября 2018

Запуск 9.5 в Ubuntu 16.04 Не знаю, какая база данных была заархивирована, я думаю 8.4

Когда я запускаю pg_restore, я получаю

pg_restore: implied data-only restore
--
-- PostgreSQL database dump
--


-- Started on 30608-10-13 11:53:01 MDT

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET row_security = off;

-- Completed on 2018-09-06 11:12:06 MDT

--
-- PostgreSQL database dump complete
--

Когда я бегу pg_restore -l

;
; Archive created at 30608-10-13 11:53:01 MDT
;     dbname: 
;     TOC Entries: -1835365408
;     Compression: -1
;     Dump Version: 1.11-0
;     Format: CUSTOM
;     Integer: 4 bytes
;     Offset: 8 bytes
;
;
; Selected TOC Entries:
;

Очевидно, что существует проблема с отметкой времени, и, очевидно, записи TOC и сжатие отключены.

Не уверен, куда идти отсюда. Размер файла указывает, что это должна быть полная резервная копия. У меня есть несколько резервных копий за один и тот же период времени, и все они сообщают о похожих, когда я пытаюсь их восстановить.

Есть ли способ распаковать часть данных файла. Я могу hexedit и увидеть схему, но данные в двоичном сжатом формате (-Fc) Postgres. Мне просто нужно найти и проверить несколько записей, поэтому, если есть ручной способ проверки и поиска, это сработает.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я не вижу проблемы с отметкой времени в вставленном вами результате, или я что-то упустил.

Хотя, как правило, если вы хотите восстановить только несколько записей, вы можете попробовать -L из pg_restore, чтобы изменить их порядок и восстановить.

Например,

pg_restore -l dbdump > dblist

Редактировать dblist файл (комментируя их или оставляя только те элементы, которые вы хотите восстановить)

pg_restore -L dblist dbdump

pg_restore -d newdb dbdump

0 голосов
/ 06 сентября 2018

Да, вы можете извлечь его, используя -f параметр:

pg_restore -f /path/to/target/file /path/from/source/dump

Подробнее здесь .

...