Есть ли способ заставить pg_dump исключить определенную последовательность?

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

Command: /Library/PostgreSQL/8.4/bin/pg_dump --host localhost --port 5433 --username xxx --format plain --clean --inserts --verbose --file /Users/xxx/documents/output/SYSTEM_admin_20131126015325.sql --exclude-table public.table1 --exclude-table public.table2 mydatabase

Я знаю, что есть переключатели для таблиц, которые я использую выше, и что вы можете включать/отключать объекты базы данных в формате tar в сочетании с pg_restore, как указано в документация по pg_dump, но я не буду использовать pg_restore.

Огромное спасибо

Грэм


person Graham    schedule 26.11.2013    source источник


Ответы (2)


Есть два случая:

  1. Исключаемая последовательность принадлежит таблице, которую вы также сбрасываете (типичный случай: столбец SERIAL).
    См.: Дамп таблицы без таблицы последовательности в postgres
    Краткий ответ: нет, последовательность нельзя оставлять в стороне.

  2. Последовательность не принадлежит таблице дампа. Затем его можно исключить с помощью переключателя --exclude-table, как если бы это была таблица.

Из документации pg_dump:

-T таблица --exclude-table=таблица

Do not dump any tables matching the table pattern.

Шаблон интерпретируется по тем же правилам, что и для -t

И по поводу -t:

-t таблица
--table=таблица

Dump only tables (or views or sequences or foreign tables) matching table
person Daniel Vérité    schedule 26.11.2013
comment
Это последовательность, которая не принадлежит таблице, поэтому опция exclude-table прекрасно работает. - person Graham; 26.11.2013
comment
-T table утверждение очень важно. Не позволяйте своей интуиции обмануть вас в этом отношении. По стандартам аргументов CLI можно подумать, что -T table больше не нужен, так как он уже указан в --exclude-table=table. Казалось бы аргумент излишний, но он действительно необходим для успешного исключения. - person Abel Callejo; 17.04.2019

Если последовательность принадлежит таблице, вы можете исключить как последовательность, так и таблицу, используя -T, например:

pg_dump -T table -T table_id_seq
person AlexDev    schedule 19.12.2019
comment
Разве это не исключило бы как последовательность, так и таблицу из дампа? - person Igor Pomaranskiy; 06.07.2021
comment
@ИгорьПомаранский да - person AlexDev; 06.07.2021