Używanie pg_dump do pobierania instrukcji wstawiania tylko z jednej tabeli w bazie danych

121

Szukam sposobu, aby uzyskać wszystkie wiersze jako INSERTinstrukcje z jednej konkretnej tabeli w bazie danych pg_dumpużywanej w PostgreSQL.

Np. Mam tabelę A i wszystkie wiersze w tabeli, których AI potrzebuje jako INSERToświadczenia, powinien również zrzucić te instrukcje do pliku.

czy to możliwe?

Elitmiar
źródło

Odpowiedzi:

229

jeśli wersja <8.4.0

pg_dump -D -t <table> <database>

Dodaj -aprzed, -tjeśli chcesz tylko INSERT, bez CREATE TABLE itp., Aby ustawić tabelę w pierwszej kolejności.

wersja> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>
psmears
źródło
58
Opcje -d i -D zostały usunięte z PostgreSQL 8.4 (zobacz informacje o wydaniu 8.4.0). Musisz teraz używać „długich” nazw: pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood
1
Te -d, -aoraz -tkrótkie wersje są wciąż obecne, choć. Sprawdzone z PG11.
demisx
--insertsto kolejna opcja; przywraca nieco szybciej, ale nie toleruje zmian kolejności kolumn
Andy
34

Jeśli chcesz ZRZUTOWAĆ swoje wstawki do pliku .sql :

  1. cddo lokalizacji, w której chcesz .sqlumieścić plik
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Zwróć uwagę na > my_dump.sqlpolecenie. Spowoduje to umieszczenie wszystkiego w pliku sql o nazwie my_dump

James111
źródło
2

Umieść w scenariuszu, który mi się podoba:

#!/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
źródło
1

na wypadek, gdybyś korzystał ze zdalnego dostępu i chciałbyś zrzucić wszystkie dane bazy danych, możesz użyć:

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

utworzy zrzut ze wszystkimi danymi i wykorzystaniem bazy danych

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

aby wstawić te same dane do bazy danych, biorąc pod uwagę, że masz taką samą strukturę

Lenon Tolfo
źródło