Ik wil wel wat gegevens zoeken in een databasedump, maar deze dumps gebruiken het binair gecomprimeerde formaat (PGDMP
header).
Hoe kan ik deze naar SQL converteren zonder ze te herstellen?
Antwoord 1, autoriteit 100%
pg_restore
, wanneer uitgevoerd zonder een databasenaam, voert een tekstdump uit naar stdout; je kunt dat ergens anders naartoe sturen met -f
of met I/O-omleiding.
pg_restore -f mydatabase.sql mydatabase.dump
Antwoord 2, autoriteit 22%
De snelste methode die ik heb gebruikt was:
pg_restore mybinaryfile.backup > mysqlfile.sql
Geen speciale vlaggen, aangezien pg_restore het gewoon uitspuugt naar stdout.
Antwoord 3
Houd er rekening mee dat als u meerdere clusters uitvoert, het herstelcommando de standaardversie mogelijk niet leuk vindt…
pg_restore: [archiver] niet-ondersteunde versie (1.12) in bestandskop
In dat geval moet u de versie, host en poort specificeren zoals in:
pg_restore --cluster 9.1/localhost:5433 -f db.sql db.pgsql
(merk op dat de host:port
info wordt genegeerd met de -f optie.)
De poort (5433) kan worden bepaald met de opdracht pgsql
zoals in:
pgsql --port 5433 template1
Wanneer pgsql
verbinding maakt, schrijft het een opmerking zoals:
psql (9.3.6, server 9.1.13)
Dit betekent dat u pgsql 9.3.6 gebruikt en dat poort 5433 verwijst naar server 9.1.13.
Als u niet zeker weet welke poorten momenteel worden gebruikt, kunt u de opdracht netstat
gebruiken zoals in:
sudo netstat -a64np | grep LISTEN | grep postgres
De sudo
is vereist voor de optie -p
die de procesnaam afdrukt. Dat geeft je een lijst met poorten (meestal TCP- en UDP-poorten).
Ten slotte kunt u op een Debian/Ubuntu-systeem een lijst met geïnstalleerde clusters krijgen met de opdracht dpkg -l
zoals in:
dpkg -l '*postgres*'
De lijst met items die beginnen met ‘ii’ (meest linkse kolom) is momenteel geïnstalleerd. Je hebt natuurlijk vergelijkbare commando’s voor andere Unices om je te helpen bij het bepalen van de geïnstalleerde versies.