Anfänger Skript

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)
Antworten
HaraldGer123
Neuer Benutzer
Beiträge: 1
Registriert: Mi 24. Okt 2018, 10:05

Anfänger Skript

Beitrag von HaraldGer123 » Mi 24. Okt 2018, 10:17

Guten Morgen zusammen,

ich würde etwas Hilfe benötigen, da ich leider nicht sonderlich erfahren bin.
Aktuell nutze ich ein Skript eines Vorgängers was ich gefunden habe.
Dieses generiert ein "Fullbackup" der Datenbank.

Da ich eine fixe Struktur habe die nie abweicht, würde ich gerne das Skript so abändern, das ich nur bestimmte Tabellen sicher.

Aktuell sieht der Skriptcode so aus:

Code: Alles auswählen

@echo off
   cd /d "%~dp0"
   setlocal ENABLEEXTENSIONS
   for /f "delims=" %%A in ('reg query "HKLM\Software\PostgreSQL\Installations"') do (
     set PSQLRegFolder=%%A
   )
   
   rem set PSQLRegFolder=HKEY_LOCAL_MACHINE\Software\PostgreSQL\Installations\postgresql-x64-9.4

   for /f "usebackq skip=2 tokens=1* delims=" %%A in (`reg query %PSQLRegFolder% /v "Base Directory" 2^>nul`) do (
     set PSQLDir=%%A
   )
   
   set PSQLDir=%PSQLDir:~32%
   
   set tstamp=
   for /f "skip=1 delims=" %%x in ('wmic os get LocalDateTime') do if not defined tstamp set tstamp=%%x
   set month=%tstamp:~4,2%
   set day=%tstamp:~6,2%
   set year=%tstamp:~0,4%
  
   set datestr=%year%-%month%-%day%
   set BACKUP_FILE=_%datestr%.backup.sql
   set PGPASSWORD=XXXXXXX
   echo creating backup from database "esl"...
   "%PSQLDir%\bin\pg_dump.exe" -h localhost -p 5432 -U postgres --if-exists -o -c -f %BACKUP_FILE% esl
   echo backup file name is %BACKUP_FILE%
   
   pause

Meine Frage ist nun: wenn ich nur 4 bestimmte Tabellen sichern möchte, wie kann ich mehrere Parameter angeben?
Das was ich online gefunden habe würde in folgende Richtung gehen:

Code: Alles auswählen

pg_dump.exe -U postgres --data-only --table=table1 esl > MyBackupTable1.pg
Naiverweise habe ich gedacht ich kann

Code: Alles auswählen

   "%PSQLDir%\bin\pg_dump.exe" -h localhost -p 5432 -U postgres --if-exists -o -c -f %BACKUP_FILE% esl
einfach mit

Code: Alles auswählen

pg_dump.exe -U postgres --data-only --table=table1 esl > MyBackupTable.pg

Code: Alles auswählen

pg_dump.exe -U postgres --data-only --table=table2 esl > MyBackupTable.pg
etc. ersetzen.

Genial wäre es, wenn ich einfach ein "Fullbackup" ziehe und über ein Skript bestimmen könnte welche tables nun genau importiert werden sollen.
Leider bin ich dort schnell durcheinander gekommen da es ja einige formate gibt die nur unter gewissen parameters miteinander harmonieren.
(.pg / .backup / .sql | psql/pg_restore etc. )

Ich hoffe ich konnte mit einigermaßen verständlich ausdrücken :o .
Ich nutze PostgreSQL 9.4 auf einem Windows 7 PC.


Vielen dank im voraus !

castorp
Erfahrener Benutzer
Beiträge: 1070
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Anfänger Skript

Beitrag von castorp » Mi 24. Okt 2018, 13:14

Den --table Parameter kannst Du mehrfach angeben:

Code: Alles auswählen

pg_dump.exe -U postgres --data-only --table=table1 --table=table2 --table=table3 es1 > MyBackupTable.sql
Wenn Du das erst beim Import machen willst, dann musst Du - wie Du schon bemerkt hast - ein anderes Format verwenden. Für den Zweck nur bestimmte Tabellen zurückzuspielen geht z.B. "custom" Format.

Code: Alles auswählen

pg_dump -Fc -U postgres --file=fullbackup_es1.pg --dbname=es1
Zurückgespielt wird es dann aber mit pg_restore, nicht psql (weil die Datei ja kein SQL Skript ist)

Code: Alles auswählen

pg_restore -U postgres --dbname=ziel_db --file=fullbackup_es1.pg --table=table1 --table=table2
Eventuell kannst Du noch ein --clean verwenden, dann werden die Tabellen in der Zieldatenbank erst ge-DROPed und wieder angelegt bevor die Daten importiert werden.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Antworten