Normalerweise eignen sich so große Dateien nicht zur Versionierung, bei Tests, die immer die Gleiche Datenbasis haben sollen, macht es jedoch Sinn und erspart das komplette zurückrollen einer ganzen DB.
Nach dem Ausführen des Batchs kann man die Dateien einfach durch hg add
in ein bestehendes Repository hinzufügen (Erzeugen eines Repositories mit hg init
) und mit hg commit -m "Nachricht"
einchecken. Trotz großer Datenmengen verhält sich mercurial doch recht performant.
@echo off REM Parameter abpruefen if "%1" == "" ( echo Bitte DB-Name angeben goto end ) REM sammeln der Tabellennamen aus Schema public psql -U postgres -d %1 -t -c "SELECT tablename FROM pg_tables WHERE schemaname = 'public'" > tables.list REM sortieren und sortierung speichern sort tables.list /O tables.list REM jede Tabelle einzeln sichern for /F %%f IN (tables.list) do ( psql -U postgres -d %1 -c "COPY %%f to STDOUT" > %%f.copy REM sortieren (nach erster Tabellenspalte) sort %%f.copy /O %%f.copy ) REM das wars schon :end PAUSE
Diese Dumps lassen sich dann Tabellenweise mit
type tabelle.copy | psql -U postgres -d <db-name> -c "COPY <tabelle> FROM STDIN"
wieder in die Tabelle zurückspielen (man sollte ggf. vorher die alten Daten löschen).