Як створити резервну копію єдиної таблиці в базі даних postgres?


160

Чи є спосіб створити резервну копію єдиної таблиці в базі даних, використовуючи postgres? І як? Це також працює з командою pg_dump?

Відповіді:


211

Використовуйте, --tableщоб сказати, pg_dumpяку таблицю має резервне копіювання:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
І як відновити цей файл резервної копії. (. резервне копіювання), я використовував, pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"але вийшов:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares

13
psql -U username -d database -1 -f your_dump.sql
rnaud

5
що ти мав на увазі: abstract_file_path?
bandungeuy

3
Я не впевнений, чому за цю відповідь проголосували, люди клацають +1, не перевіряючи речі і не намагаючись. Проблема з цією відповіддю, яка робить її цілком марною, полягає в тому, що наведені рішення / команди не експортують послідовності, створені в таблиці (первинний ключ), і тому імпорт не вдається. Мені не відома ні одна виробнича база даних ніде, яка не використовує первинні ключі з послідовностями. Це половина відповіді, не дає ґрунтовної відповіді на запитання та вимагає додаткової роботи для експорту / імпорту єдиної таблиці.
користувач10664542

1
з дещо іншим поворотом судо до цього я закінчився помилкою дозволу на дамп файлу (досить логічно, оскільки користувацькі postgres не мають доступу до записів у моїх каталогах), і у мене була невідома помилка прапора для --ignore-version. Відповідь Прашанта Кумара, яка простіше, працювала на мене.
JL

84

Якщо ви перебуваєте на Ubuntu,

  1. Увійдіть до свого користувача postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Переконайтеся , що ви виконуєте команду , де postgresкористувач має право на запис (Приклад: /tmp)

Редагувати

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

Можна використовувати pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
Що робити, якщо ви хочете, щоб усі таблиці були, не вказуючи їх імені?
shekeine

3
Просто видаліть опцію -t! pg_dump -d <database_name> > file.sql
Шрі Харша Каппала

4
Я не знаю, чому опція -d не вірна для psql9.3, і дана команда не працює для мене. Робочим є pg_dump -U ім’я db_name -t table_name> fileName .
serkan kucukbay

pg_dump -t <table_name> <database_name> > file.sql
Шрірам

@ user10664542: Будь ласка, прочитайте посібник, особливо цей розділ: "Для цього" таблиця "включає перегляди, матеріалізовані подання, послідовності та іноземні таблиці".
Френк Хайкенс

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

Ви можете взяти резервну копію однієї таблиці, але я б запропонував зробити резервну копію всієї бази даних, а потім відновити ту таблицю, яка вам потрібна. Завжди добре мати резервну копію цілої бази даних.

9 способів використання pg_dump


Я не впевнений, чому за цю відповідь проголосували, люди клацають +1, не перевіряючи речі і не намагаючись. Проблема з цією відповіддю, яка робить її цілком марною, полягає в тому, що наведені рішення / команди не експортують послідовності, створені в таблиці (первинний ключ), і тому імпорт не вдається. Мені не відома ні одна виробнича база даних ніде, яка не використовує первинні ключі з послідовностями. Це половина відповіді, не дає ґрунтовної відповіді на запитання та вимагає додаткової роботи для експорту / імпорту єдиної таблиці.
користувач10664542

як було зазначено вище, у мене є сильна підозра на те, що користувач10664542, не маючи жодної відповіді на відповідні повідомлення про його ім'я, знаходиться поза його глибиною. в той час, як послідовність дійсно приносить додаткові ускладнення, достатньо відгуків на подібні відповіді, які, напевно, люди змусили їх працювати, навіть якщо їм довелося коригувати послідовність після факту. якби мені довелося відновити дамп, я шукав би способи оновити останній ідентифікатор послідовності з а max(id)на моєму столі. це відповідь, над якою працював, і я впевнений, дивлячись на створений sql, що я міг би відновити його.
JL

9

Якщо ви віддаєте перевагу графічний інтерфейс користувача, ви можете використовувати pgAdmin III (Linux / Windows / OS X). Просто клацніть правою кнопкою миші на обрану вами таблицю, а потім "резервну копію". Це створить pg_dumpкоманду для вас.

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення


2

Як додаток до відповіді Френка Хейкена, якщо ви хочете використовувати INSERTвиписки замість copy from stdin, тоді вам слід вказати --insertsпрапор

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Зауважте, що я пропустив --ignore-versionпрапор, оскільки він застарілий.


Я не впевнений, чому за цю відповідь проголосували, люди клацають +1, не перевіряючи речі і не намагаючись. Проблема з цією відповіддю, яка робить її цілком марною, полягає в тому, що наведені рішення / команди не експортують послідовності, створені в таблиці (первинний ключ), і тому імпорт не вдається. Мені не відома ні одна виробнича база даних ніде, яка не використовує первинні ключі з послідовностями. Це половина відповіді, не дає ґрунтовної відповіді на запитання та вимагає додаткової роботи для експорту / імпорту єдиної таблиці.
користувач10664542
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.