нужен специалист по postgresql !

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
  [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
Seolivan
17.07.2019 - 21:00
Статус: Offline


Шутник

Регистрация: 12.11.12
Сообщений: 30
0
Добрый день, уважаемые ! Может быть есть, кто шарит, как воcстановить удаленные данные из таблицы postgres под windows :( Каким то "макаром" удалилось из таблицы 29000 позиций.... Наш программист тут не зарегистрирован, а мозгов что делать у него не хватает, может будут добрые люди, проконсультировать......

p/s/ Конечно же бэкапов нихрена нет ! ((((((
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
Les1920
17.07.2019 - 21:03
0
Статус: Offline


Демон в коре

Регистрация: 5.08.13
Сообщений: 3071
Seolivan
Цитата
p/s/ Конечно же бэкапов нихрена нет ! ((((((

Веревку и мыло куда высылать для итшника?

Код

Предположим, сделана и закомитчена команда

DELETE FROM testtable;
Если повезёт (не пройдёт VACUUM), восстановить данные можно так:


остановить сервер
отключить автовакуум
запустить сервер
сделать копию данных rsync при работающем сервере,
остановить сервер
сделать копию данных rsync при остановленном сервере,
запустить сервер
Теперь у нас есть данные.

Устанавливаем тестовую машину с постгресом,
копируем ему сохранённые данные,
отключаем автовакуум,
настраиваем конфиги,
Скачиваем https://github.com/omniti-labs/pgtreats.git и берём из него pg_dirtyread,
компилируем, ставим. Надо обратить внимание, чтобы расширение легло туда куда нужно,
так как при установке на систему с несколькими версиями postgresql скопируется всюду
кроме нужной версии.

Это расширение постгреса. В документации написано запускать его как CREATE EXTENSION,
но например в 9.0 этого не было. Можно просто запустить SQL команду

CREATE FUNCTION pg_dirtyread(oid)
RETURNS setof record
AS 'pg_dirtyread'
LANGUAGE C;
(это подправленная оригинальная pg_dirtyread—1.0.sql

CREATE FUNCTION pg_dirtyread(oid)
RETURNS setof record
AS 'MODULE_PATHNAME'
LANGUAGE C;
Запускать надо в той базе, которая будет восстанавливаться.

Теперь можно следовать инструкции — найти удалённые данные:

sеlесt * FROM pg_dirtyread(‘foo’::regclass) as t(bar bigint, baz text);

(bar bigint, baz text) — это определение столбцов исходной таблицы.
Берётся из соманды CREATE TABLE из схемы, исправляется — удаляются default, primary key, not null,
типы serial меняем на integer и так далее, то есть упрощаем схему.

Что получится — как повезёт.
 
[^]
Seolivan
17.07.2019 - 21:56
0
Статус: Offline


Шутник

Регистрация: 12.11.12
Сообщений: 30
Цитата (Les1920 @ 17.07.2019 - 21:03)
Seolivan
Цитата
p/s/ Конечно же бэкапов нихрена нет ! ((((((

Веревку и мыло куда высылать для итшника?

Код

Предположим, сделана и закомитчена команда

DELETE FROM testtable;
Если повезёт (не пройдёт VACUUM), восстановить данные можно так:


остановить сервер
отключить автовакуум
запустить сервер
сделать копию данных rsync при работающем сервере,
остановить сервер
сделать копию данных rsync при остановленном сервере,
запустить сервер
Теперь у нас есть данные.

Устанавливаем тестовую машину с постгресом,
копируем ему сохранённые данные,
отключаем автовакуум,
настраиваем конфиги,
Скачиваем https://github.com/omniti-labs/pgtreats.git и берём из него pg_dirtyread,
компилируем, ставим. Надо обратить внимание, чтобы расширение легло туда куда нужно,
так как при установке на систему с несколькими версиями postgresql скопируется всюду
кроме нужной версии.

Это расширение постгреса. В документации написано запускать его как CREATE EXTENSION,
но например в 9.0 этого не было. Можно просто запустить SQL команду

CREATE FUNCTION pg_dirtyread(oid)
RETURNS setof record
AS 'pg_dirtyread'
LANGUAGE C;
(это подправленная оригинальная pg_dirtyread—1.0.sql

CREATE FUNCTION pg_dirtyread(oid)
RETURNS setof record
AS 'MODULE_PATHNAME'
LANGUAGE C;
Запускать надо в той базе, которая будет восстанавливаться.

Теперь можно следовать инструкции — найти удалённые данные:

sеlесt * FROM pg_dirtyread(‘foo’::regclass) as t(bar bigint, baz text);

(bar bigint, baz text) — это определение столбцов исходной таблицы.
Берётся из соманды CREATE TABLE из схемы, исправляется — удаляются default, primary key, not null,
типы serial меняем на integer и так далее, то есть упрощаем схему.

Что получится — как повезёт.

Спасибо большое, за предложенный вариант ! Подобное предложение бы с учетом того, что это все под виндой.
 
[^]
Les1920
18.07.2019 - 14:50
0
Статус: Offline


Демон в коре

Регистрация: 5.08.13
Сообщений: 3071
Seolivan
Цитата
Спасибо большое, за предложенный вариант ! Подобное предложение бы с учетом того, что это все под виндой.

Поднять на лине сервер БД админу религия не позволяет ?
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 813
0 Пользователей:
[ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх