Использование pg_dump только для получения операторов вставки из одной таблицы в базе данных

121

Я ищу способ получить все строки в виде INSERTоператоров из одной конкретной таблицы в базе данных, используя pg_dumpPostgreSQL.

Например, у меня есть таблица A и все строки в таблице AI, которые нужны как INSERTоператоры, он также должен выгружать эти операторы в файл.

Это возможно?

Elitmiar
источник

Ответы:

230

если версия <8.4.0

pg_dump -D -t <table> <database>

Добавьте -aперед, -tесли вы хотите только INSERT, без CREATE TABLE и т.д., чтобы настроить таблицу в первую очередь.

версия> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
источник
58
Параметры -d и -D были удалены из PostgreSQL 8.4 (см. Примечания к выпуску 8.4.0). Теперь вы должны использовать «длинные» имена: pg_dump --column-insertts --data-only --table = <table> <database>
Мэтью Вуд
1
В -d, -aи -tкороткие версии все еще присутствуют, хотя. Проверял с PG11.
demisx
--insertsэто еще один вариант; он восстанавливается немного быстрее, но не переносит изменения порядка столбцов
Энди,
34

Если вы хотите сбросить свои вставки в файл .sql :

  1. cdв место, в котором вы хотите разместить .sqlфайл
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Обратите внимание на > my_dump.sqlкоманду. Это поместит все в sql файл с именем my_dump

James111
источник
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
Pipo
источник
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

для вставки тех же данных в вашу базу данных, учитывая, что у вас такая же структура

Ленон Тольфо
источник