2014-01-29 5 views
0

Я пытаюсь вызвать команду pg_dump в пакетном файле. Сначала я получаю все имена таблиц, а затем петлю каждую таблицу и выполняю команду pg_dump. Это должно быть, вероятно, что-то подобное, но я получаю сообщение об ошибке, как «Ошибка синтаксиса»:Вызов команды psql pg_dump в пакетном скрипте

for %%T in (psql -U postgres -w -d test_db -t -c "SELECT table_name FROM 
information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'") 
do pg_dump -t %%T -U postgres test_db -w -f "C:\Users\mtuna\Documents\dumpfiles\%%T.sql" 
done; 

Любая помощь будет оценена.

+0

Как вы хранящие пароль? – Houari

ответ

2

Вот решение:

@echo off 
SET TableListeFile=C:\Users\mtuna\Documents\dumpfiles\database_list.txt 

REM Saveing all tables name of database test_db on a temp file: database_list.txt 
psql -U postgres -d test_db -t -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'" -o "%TableListeFile%" 

REM Loop on liste tables name: 
FOR /F "tokens=*" %%I IN (%TableListeFile%) DO (
REM Dump each table on file 
pg_dump -U postgres -h localhost -t %%I test_db > "C:\Users\mtuna\Documents\dumpfiles\%%I.sql" 
) 
REM Delete temp file 
del /Q %TableListeFile% 

Он предложит вам для ввода пароля для каждого отвала. Если вы не хотите, чтобы вас обедали, вы можете использовать Pgpass File.

Надеюсь, что это поможет.

Houari.

+0

Тот, кто придумал синтаксис 'for/F' в сценариях cmd.exe ... о, мне это не нравится. –

+0

Отлично, это то, что я искал, но проблема заключается в том, что имена таблиц имеют пробелы типа «ID: 00070246 CH: 0001 ExportEinstellungen». Поэтому обычно «public. \» ID: 00070246 CH: 0001 ExportEinstellungen \ "" должен работать, но "public. \" %% I \ "" не работает. Есть ли у вас какие-либо идеи? – mctuna

+0

Я получил ошибку на немецком языке, мог быть переведен как синтаксическая ошибка по имени файла, имени каталога или букве диска – mctuna

1

Резервное копирование: batch_file_backup.bat

@echo off 
SET PGPATH="E:\PostgreSQL\9.5\bin\pg_dump.exe" 
SET PGPASSWORD=admin 
%PGPATH% -h 127.0.0.1 -p 5432 -U postgres -F c -b -v -f C:\Users\Pukar\Downloads\backupfile\2017-04-04.backup database_name 

резервного файла Bat Run PHP код:

$batchfile_path = "E:/xampp/htdocs/yig2016/ybase/main_app/bizlayer/protected/batch_file_backup.bat"; 
$WshShell  = new COM("WScript.Shell"); 
$exec   = $WshShell->Run($batchfile_path, 0, false); 

Восстановление: batch_file_restore.bat

@echo off 
SET PGPATH="E:\PostgreSQL\9.5\bin\pg_restore.exe" 
SET PGPASSWORD=admin 
%PGPATH% -h 127.0.0.1 -p 5432 -U postgres -d database_name -v C:\Users\Pukar\Downloads\backupfile\2017-04-04.backup 

Bat File Restore Run PHP код:

$batchfile_path = 
E:/xampp/htdocs/yig2016/ybase/main_app/bizlayer/protected/batch_file_restore.bat"; 
$WshShell  = new COM("WScript.Shell"); 
$exec   = $WshShell->Run($batchfile_path, 0, false); 

Ссылки:http://www.somelesson.blogspot.com/2017/04/postgresql-backup-and-restore.html

Смежные вопросы