Найти в Дзене
БЛОГ CYBER01

Как сделать дамп только нужных записей из базы данных

Бывало такое, что из всей таблицы нужно сделать дамп только определенных строк? Например, результата какого-либо запроса? Штатными средствами того же pg_dump это не сделать (а я столкнулся с этой проблемой именно при работе с PostgreSQL), но тут нашлась хитрость.

Допустим у вас есть таблица table1, в которой 50 тысяч записей, а вас нужно выбрать только те, у которых ID в диапазоне между 30000 и 40000, а потом из этого получить дамп (copy или inserts).

Т.е. фактически результат псевдозапроса:

select * from table1 where id between 30000 and 40000

Вы можете сделать временную таблицу, куда загрузить результаты вашего запроса

create table export_table1 as select * from table1 where id between 30000 and 40000;

А потом уже сделать дамп этой таблицы через

pg_dump -d testdb -t 'export_table1' --data-only --inserts > table1_30000_40000_dump.sql

После этого не забудьте удалить временную таблицу

drop table export_table1;

И теперь единственное, что вам нужно сделать - изменить в полученном дампе имя таблицы с export_table1 на table1. Это можно сделать с помощью sed в linux:

sed -i 's/export_table1/table1/g' table1_30000_40000_dump.sql

Собственно всё, задача выполнена

Статья написана для моего блога: https://cyber01.ru/kak-sdelat-damp-tolko-nuzhnyh-zapisej-iz-bazy-dannyh/