Odpalenie automatem kodu do postgresql windows command line

0

Cześć,

potrzebuję stworzyć automatyczny plik, który bedzie odpalal mi pg_dumpa w postgresql.

to jest moje polecenie w windows command line:

"pg_dump -U postgres -C -f C:\Temp\sample_backup AccessLog -w 1234""

Trudnosc polega na tym, że chcę mieć możliwość przekazania zmiennych dla użytkownika, hasła, oraz nazwy pliku (z dzisiejszą datą aby była).

Wydaje mi się ze odpowiedzia moze byc bash ? (ktorego kompletnie nie znam),

Podpowie ktoś proszę?
Pozdrowiam,
Jacek

1

Można np. tak:

@echo off
SET PGUSER=%1
SET PGPASSWORD=%2
SET DBNAME=%3
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
set datestr=%date%_%hr%%time:~3,2%%time:~6,2%
echo datestr is %datestr%
set BACKUP_FILE=%DBNAME%_%datestr%.backup
echo backup file name is %BACKUP_FILE%
echo on
pg_dump -h localhost -p %PGPASSWORD% -U %PGUSER% -F c -b -v -f %BACKUP_FILE% %DBNAME%

wywołanie:

backup.bat USER HASLO NAZWABAZY

Wynik:

datestr is 2018-07-03_151239
backup file name is NAZWABAZY_2018-07-03_151239.backup

pg_dump -h localhost -p HASLO -U USER -F c -b -v -f NAZWABAZY_2018-07-03_151239.backup NAZWABAZY

Posiłkowałem się tym: https://wiki.postgresql.org/wiki/Automated_Backup_on_Windows

0

wow super ! Dziękuje Ci bardzo @Panczo

Co to znaczy:

:~0,2%

I jak mogę wybrać docelowy folder do zapisu? Teraz jest w tym samym.

PRzy tym > set BACKUP_FILE=%DBNAME%_%datestr%.backup

moglbym dodac sciezke?

Pozdrowienia,
Jacek

0

Zapis:

set hr=%time:~0,2%

weźmie dwa znaki ze zmiennej %time%, licząc od 0, tak jest to indeksowane (w tłumaczeniu pierwsze dwa znaki) i przypisze do zmiennej %hr%

if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%

To wyrażenie sprawdza czy pierwszy znak nie jest spacją, dla godzin przedpołudniowych %time% zwróci _9:05:46,21 (znak podkreślenia jest mój, chodzi o czytelnośc, normalnie jest to spacja), jeżeli jest pusty to do zmiennej %hr% przypisze 2 znak w przykładzie 9, w "normalnym języku" można by użyć funkcji LTrim.

Ścieżke możesz przekazać jako parametr, lub dopisać z ręki:

 set BACKUPFILE=d:\backup\%DBNAME%%datestr%.backup
0

Dziękuje Ci bardzo.

Wszystko kumam, dobrze tłumaczyusz wiesz?

Oprócz tego:

hr=0%hr:~1,1%
jak z 1,1 i 0 wie, że ma wziąć 2 znak?

Jacek

0

No to jaśniej:

set hr=%time:~0,2%

%time% = " 946,21"
%time:~0,2%=" 9" spacja na pierwszym znaku

if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%

%hr% = " 9", 0 znak = " " , 1 znak = "9"
%hr:~0,1%, można porównać do funkcji substring w zapisie %nazwazmiennej:~start,dlugosc%
start liczymy od 0, czyli if sprawdza pierwszy znak, odpowiednik postgresowy: substring(" 9",1,1)
jeżeli = " " to przypisuje "drugi" znak i dodaje widące 0 czy efekt: w zmiennej będzie "09", w postgresie zapis 0%hr:~1,1% = '0' || substring(" 9",2,1)

0

Dziękuję Ci bardzo !

Jacek

1 użytkowników online, w tym zalogowanych: 0, gości: 1