Використовуючи pg_dump, щоб отримати лише вставки операторів з однієї таблиці всередині бази даних


121

Я шукаю спосіб отримати всі рядки у вигляді INSERTвисловлювань з однієї конкретної таблиці в базі даних за допомогою pg_dumpPostgreSQL.

Наприклад, у мене є таблиця A і всі рядки в таблиці AI потрібні як INSERTзаяви, вона також повинна скидати ці твердження у файл.

Чи можливо це?

Відповіді:


229

якщо версія <8.4.0

pg_dump -D -t <table> <database>

Додайте -aперед тим, -tякщо ви хочете лише ВСТАВКИ, без СТВОРЕННЯ ТАБЛИЦІ тощо, щоб створити таблицю в першу чергу.

версія> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>

58
Параметри -d та -D були видалені з PostgreSQL 8.4 (див. Примітки до випуску 8.4.0). Тепер ви повинні використовувати "довгі" імена: pg_dump - колонка-вставки - лише дані --table = <table> <database>
Метью Вуд

1
Однак -d, -aі -tкороткі версії все ще присутні. Перевірено з PG11.
demisx

--insertsінший варіант; він відновлюється трохи швидше, але не терпить змін порядку стовпців
Енді,

34

Якщо ви хочете DUMP ваші вставки у файл .sql :

  1. cdдо місця, яке ви хочете .sqlподати
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Зверніть увагу на > my_dump.sqlкоманду. Це помістить усе у файл sql з назвою my_dump


2

Покласти в сценарій мені подобається щось подібне:

#!/bin/bash
set -o xtrace # remove me after debug
TABLE=charge_unit
DB_NAME=prod_sit_entities_db

BASE_DIR=/var/backups/someDir
LOCATION="${BASE_DIR}/myApp_$(date +%Y%m%d_%H%M%S)"
FNAME="${LOCATION}_${DB_NAME}_${TABLE}.sql"

# Create backups directory if not exists
if [[ ! -e $BASE_DIR ]];then
|       mkdir $BASE_DIR
|       chown -R postgres:postgres $BASE_DIR
fi

sudo -H -u postgres pg_dump --column-inserts --data-only --table=$TABLE $DB_NAME > $FNAME
sudo gzip $FNAME

1

на випадок, якщо ви використовуєте віддалений доступ і хочете скинути всі дані бази даних, ви можете використовувати:

pg_dump -a -h your_host -U your_user -W -Fc your_database > DATA.dump

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

pg_restore -a -h your_host -U your_user -W -Fc your_database < DATA.dump

щоб вставити ті самі дані у свою базу даних, враховуючи, що у вас однакова структура

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