Anfänger Skript

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:

@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:

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

Naiverweise habe ich gedacht ich kann

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

einfach mit

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



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 :astonished: .
Ich nutze PostgreSQL 9.4 auf einem Windows 7 PC.


Vielen dank im voraus !

Den --table Parameter kannst Du mehrfach angeben:

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.

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)

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.