Postgresql: резервное копирование всех структур таблиц, но только нескольких таблиц данных

У меня есть база данных с таблицами настроек приложения, списками пользователей, отделов, городов. Мне нужна структура и данные для этих таблиц. Поэтому, если я получу нового пользователя, резервная копия сохранит его.

Но также есть некоторые данные для исторических и расчетных данных, эти данные поступили из других источников и работают только в течение некоторого времени, а затем истекают, поэтому резервное копирование этих данных будет бесполезным. Но потребуется структура, чтобы при восстановлении были созданы таблицы, необходимые для приложения.

сейчас я использую эту команду, но она сохраняет всю таблицу и все данные.

pg_dump -U "postgres" -h "local" -p "5432" 
        -d dbName -F c -b -v -f c:\uti\backup.dmp

У меня есть 2 дополнительных вопроса по pg_dump.

A) в документации говорится, что опция -b предназначена для данных blob. У меня очень большие таблицы, но я предполагаю, что эти параметры предназначены только для таблиц с полем BLOB, поэтому не должно иметь никакого значения в моей резервной копии, потому что у меня нет этих полей?.

Б) Я вижу, что параметры pg_dump предназначены для таблиц и схем. Как вы указываете, хотите ли вы сохранить код функции?


person Juan Carlos Oropeza    schedule 01.07.2014    source источник
comment
Сделайте это за 2 шага. Сделайте резервную копию вашей схемы (с функциями), а затем выборочно табличные данные.   -  person mlt    schedule 01.07.2014
comment
Итак, я сделал pg_dump в файл backup ... а затем еще один pg_dump в тот же файл? Если это так, просто отправьте его как ответ, чтобы я мог проголосовать за него.   -  person Juan Carlos Oropeza    schedule 01.07.2014
comment
хорошо, это не сработает, потому что перезаписать первый файл.   -  person Juan Carlos Oropeza    schedule 02.07.2014
comment
re a): -b для больших объектов, а не для bytea столбцов (Postgres 'эквивалент BLOB bytea)   -  person a_horse_with_no_name    schedule 02.07.2014
comment
так что такое большой объект? таблица с большим количеством строк?   -  person Juan Carlos Oropeza    schedule 02.07.2014
comment
@JuanCarlosOropeza (на будущее) вы можете использовать --blobs для включения объектов blob в дампы.   -  person JP Silvashy    schedule 05.12.2018


Ответы (2)


Исключите таблицы, для которых не требуется резервное копирование.

pg_dump -U "postgres" -h "local" -p "5432" 
        -d dbName -F c -b -v -f c:\uti\backup.dmp
        --exclude-table-data '*.table_name_pattern_*'
        --exclude-table-data 'some_schema.another_*_pattern_*'

Код создания функции является частью схемы.

person Clodoaldo Neto    schedule 01.07.2014
comment
Значит, даже если я исключу таблицу, оператор CREATE TABLE все еще будет в резервной копии? Также ... похоже, я могу указать несколько параметров --exclude-table-data? - person Juan Carlos Oropeza; 02.07.2014
comment
Да, он исключает только данные таблицы. Оператор создания таблицы будет выведен в резервную копию. Да несколько --exclude-table-data - person Clodoaldo Neto; 02.07.2014
comment
В версиях старше 9.2 это нужно делать в два этапа: Первый шаг - резервное копирование схемы базы данных pg_dump --schema-only Второй шаг - резервное копирование данных таблицы, исключая определенную таблицу pg_dump --data-only --exclude-table - person FiruzzZ; 18.05.2015

Клодоальдо Нето - лучший вариант. Однако я наблюдал странное поведение при использовании pg_dump с заглавными буквами. Проблема также описана здесь

Итак, в моем случае игнорируемая таблица была названа ChangeHistory, и трюк, чтобы игнорировать ее, заключался в подстановке заглавных букв, как показано ниже.

pg_dump [omitted for brievity] --exclude-table "*hange*istory"
person Bohdan Stupak    schedule 10.02.2021