pg_dump
, вероятно, лучший вариант, так как это инструмент экспорта, который поставляется в комплекте с Postgres и предназначен (более или менее) именно для этого. Единственная загвоздка в указанном вами требовании заключается в том, что оно специально запрашивает определенные типы объектов (что, как я предполагаю, является строгим требованием).
pg_dump
имеет флаг -s (--schema-only)
, который выводит все операторы create
для всех объектов (а не только для таблиц и триггеров). Так что думаю есть 2 варианта:
- выгрузить все это, а затем отсортировать. Мне не очень нравится эта идея, потому что вам придется столкнуться с проблемой написания сценариев для начала/конца всех видов различных SQL-операторов в чтобы выбрать только то, что нужно удалить. Слишком грязный.
- напишите скрипт, который обертывает
pg_dump
и предварительно выбирает только триггеры и таблицы. Пусть скрипт использует psql
для запроса к системным таблицам Postgres, чтобы получить имена всех объектов table
и trigger
. Затем введите этот список в pg_dump
, чтобы экспортировать каждый объект по отдельности.
Вариант 2 звучит намного проще, но также и медленнее, так как я думаю, что триггеры, возможно, придется выполнять один за другим (таблицы можно сделать массово, используя параметр -t (--table=TABLE)
для pg_dump
). Но поскольку это только сброс объектов схемы и никаких данных, это, вероятно, не будет иметь большого значения.
Вы можете выбрать триггеры следующим образом:
pg_dump -s -Fc | pg_restore --trigger='my_trigger'
И это можно было бы завернуть в скрипт:
#!/bin/bash
my_db='db_name'
triggers=($(psql --dbname="${my_db}" -A -R ', ' -t \
-c 'select tgname from pg_trigger'))
for trigger in "${triggers[@]}"; do
pg_dump -s -Fc | pg_restore --trigger="$trigger"
done
person
Z4-tier
schedule
28.01.2020
pg_dump
(возможно, с опцией-s
, если вам не нужны данные)? документы 9.6 здесь - person wobr   schedule 28.01.2020