Створення дампа бази даних для конкретних таблиць та записів Postgres


94

У мене є база даних із сотнями таблиць, мені потрібно експортувати вказані таблиці та вставити оператори даних у один файл sql.

Єдине твердження, яке я знаю, може цього досягти -

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

Чи слід запускати цей оператор для кожної таблиці, чи є спосіб запустити подібний оператор, щоб експортувати всі вибрані таблиці в один великий sql big. Pg_dump вище не експортує лише вставки схеми таблиці, мені потрібні обидва

Будь-яка допомога буде вдячна.

Відповіді:


160

Прямо з посібника : " Можна вибрати кілька таблиць, написавши кілька перемикачів -t "

Тому вам потрібно перерахувати всі ваші таблиці

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

Зверніть увагу, що якщо у вас є кілька таблиць з однаковим префіксом (або суфіксом), ви також можете використовувати підстановочні символи, щоб вибрати їх із -tпараметром:

" Крім того, параметр таблиці інтерпретується як шаблон згідно з тими ж правилами, що використовуються командами \ d psql \ "


20
перемикач -T є таким же чином, але використовується для виключення таблиць. Може бути корисним, якщо вам потрібні всі, крім однієї чи двох таблиць тощо
Скотт Марлоу

4
-DЗдається, ця опція зникла в PG 9.1 і далі
Епіген

5
-DВаріант був видалений в версії 8.4 . Вам --column-insertsнатомість потрібно використовувати зараз.
mlovic

1
Спробуйте pg_dump --host 127.0.0.1 --port 5432 - ім'я користувача "<ім'я користувача>" --column-inserts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "" <ім'ятаблиці> "
Тарінду Джаясурія

22

Якщо ці конкретні таблиці відповідають певному регулярному виразу, Ви можете використовувати параметр регулярного виразу в -t у pg_dump.

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

Наприклад, для скидання таблиць, які починалися з "test", ви можете використовувати

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
якщо це був регулярний вираз, чи не слід це робити ^test.*замість ^test*?
msrd0,

5
Це не регулярний вираз, він використовує "шаблони" postgres, тому насправді має бути "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

Нетривіально використовувати регулярний вираз, генеруючи недійсний регулярний вираз: помилкова помилка операнда квантора . Але регулярний вираз правильний ... Дійсні лише дуже прості регулярні вирази
Пітер Краус,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.