PostgreSQL - скидати кожну таблицю в інший файл

Мені потрібно витягти SQL-файли з декількох таблиць бази даних PostgreSQL. Це те, що я придумав дотепер:

Однак, як бачите, усі таблиці, які починаються з префікса thr, експортуються до єдиного уніфікованого файлу (db_dump.sql). У мене є майже 90 таблиць для вилучення SQL, тому обов’язково зберігати дані в окремих файлах.

Як я можу це зробити? Спасибі заздалегідь.

4 відповіді 4

Якщо ви із задоволенням кодуєте список таблиць, але просто хочете, щоб кожна була в іншому файлі, ви можете використовувати цикл сценарію оболонки для запуску команди pg_dump кілька разів, замінюючи ім'я таблиці щоразу, коли кругом цикл:

РЕДАГУВАТИ: Цей підхід можна розширити, щоб динамічно отримувати список таблиць, запускаючи запит через psql та подаючи результати у цикл замість жорстко закодованого списку:

Тут psql -t -c "SQL" запускає SQL і видає результати без верхнього або нижнього колонтитула; оскільки вибрано лише один стовпець, у кожному рядку вихідних даних, захоплених $ (команда), буде вказана назва таблиці, і ваша оболонка буде циклічно прокручувати їх по черзі.

кожну

Починаючи з версії 9.1 PostgreSQL (вересень 2011 р.), Під час створення резервних копій можна використовувати вихідний формат каталогу

та 2 версії/через 2 роки після (PostgreSQL 9.3) --jobs/-j робить ще більш ефективним паралельне резервне копіювання кожного окремого об'єкта

але те, що я не розумію у вашому вихідному питанні, це те, що ви використовуєте опцію -s, яка скидає лише визначення об'єкта (схему), а не дані.

якщо ви хочете отримати дані, ви не повинні використовувати -s, а скоріше -a (лише для даних) або жодної опції мати схему + дані

отже, для резервного копіювання всіх об'єктів (таблиць.), що починається з 'th' для бази даних dbName у каталозі dbName_objects/з 10 одночасними завданнями/процесами (збільшити навантаження на сервер):

pg_dump -Fd -f dbName_objects -j 10 -t 'thr_ *' -U userName dbName

(Ви також можете використовувати -a/-s, якщо хочете дані або схему об'єктів)

в результаті каталог буде заповнений toc.dat (зміст усіх об'єктів) і один файл на об'єкт (.dat.gz) у стислій формі

кожен файл називається за номером об'єкта, і ви можете отримати список за допомогою наступної команди pg_restore:

pg_restore --list -Fd dbName_objects/| grep 'ТАБЛИЦІ ДАНІ'

для того, щоб кожен файл не стискався (у необробленому SQL)

pg_dump - лише дані --compress = 0 --format = directory --file = dbName_objects --jobs = 10 --table = 'thr_ *' --username = userName --dbname = dbName