Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   Нужно дописать запрос в pg_dump.exe (https://forum.antichat.xyz/showthread.php?t=91296)

prescott 11.11.2008 11:03

Нужно дописать запрос в pg_dump.exe
 
В реверсинге я ноль, поэтому прошу помощи.

Есть консольная утилита pg_dump.exe (поставляется вместе с PostgreSQL сервером). Она создает архив базы данных. Нужно дописать туда запрос для удаления архивированных записей. Смысл в том, что база увеличивается на 5 гигов в день, нужно чтобы утилита делала архив, и все заархивированные записи удаляла из базы.

Думаю дело пяти минут, особенно для тех, кто работал с постгрес. Кто сделает с меня много плюсафф. :)

prescott 11.11.2008 11:09

_http://depositfiles.com/files/zsvtlhmg1

Собственно сама прога у кого нет

[Raz0r] 11.11.2008 11:26

Зачем все так усложнять? Ты ведь pg_dump по крону выполняешь? Хотя если ты и вручную делаешь бэкап, то гораздо легче после завершения создания архива выполнять SQL-команды для удаления ненужных записей, т.е. сначала выполняешь pg_dump, а потом команду:
echo "truncate table tablename;" | psql database -q -t
http://www.postgresql.org/docs/7.4/static/app-psql.html

prescott 11.11.2008 12:08

Цитата:

Сообщение от [Raz0r]
Зачем все так усложнять? Ты ведь pg_dump по крону выполняешь? Хотя если ты и вручную делаешь бэкап, то гораздо легче после завершения создания архива выполнять SQL-команды для удаления ненужных записей, т.е. сначала выполняешь pg_dump, а потом команду:
echo "truncate table tablename;" | psql database -q -t
http://www.postgresql.org/docs/7.4/static/app-psql.html

Этот способ был был хорош в случае с одной таблицей и добавлением 1 записи в минуту. В моей базе около 30 таблиц, и за секунду она увеличивается на несколько сотен записей.

То есть если сделать как ты предлагаешь, на момент запуска pg_dump.exe база будет содержать например 1000000 записей - 1000000 заархивируется, а когда после завершения работы я буду чистить таблицы, они будут содержать 1000253 записи => 253 записи будут утеряны.

Следовательно я вижу такой вариант: программа записала sql команду по вставке строки в дамп - строку удалила и т.д.

[Raz0r] 11.11.2008 12:19

Цитата:

То есть если сделать как ты предлагаешь, на момент запуска pg_dump.exe база будет содержать например 1000000 записей - 1000000 заархивируется, а когда после завершения работы я буду чистить таблицы, они будут содержать 1000253 записи => 253 записи будут утеряны.
тогда делай так: перед созданием архива получай количество записей в каждой таблице, затем выполняй pg_dump и по его завершении удаляй именно то число записей, которые имелось в таблице перед архивированием. Имхо задача решается небольшим sh-скриптом, где в массиве указаны все таблицы и в цикле для каждой выполняются три шага, описанных выше.
Примерно так:
Код:

count = $(echo "select count(*) from tablename;" | psql database -q -t);
# тут pg_dump
echo "delete from tablename limit $count;" | psql database -q -t;


prescott 11.11.2008 12:23

Видимо придется так и делать. Просто думал что дописать в экзешник команду будет быстрее...


Время: 01:27