PSQL запустить несколько одновременных сценариев. SQL и ограничить процессы - PullRequest
0 голосов
/ 19 января 2019

Справочная информация: ОС Win10 Postgresql 9,6 Postgis 2.5

История: У меня есть 200 .slq скриптов с запросами postgres (функция st_union) в папке win. Я могу запустить "for %% f in (* .sql) do (start cmd / c" psql -U postgres -f "%% f" abn2030 ")" .bat для этих файлов параллельно, и мои 8 ядер имеют некоторые фураж. За исключением 200 сценария слишком много. Я ищу способ ограничить количество работающих экземпляров 'cmd' / 'psql'. Я хочу проверить наличие экземпляров cmd (или psql) и запустить следующие (ожидающие в очереди) сценарии .sql только в том случае, если число экземпляров cmd / psql меньше 15. (если это имеет смысл; возможно, есть другие варианты) , Я пробовал PowerShell и Python (в меньшей степени), и я не знаю, что (если таковые имеются), чтобы продолжить.

PowerShell: работает прямо. Сценарий выполняется без проблем.

cmd /c ""C:\PostgreSQL\9.6\bin\psql.exe" -U postgres -d db -f "D:\Dropbox\scripts_sql\execute_htunion\pwshl\queries1.SQL""

в скрипте: (украдено в основном из другого поста)

function numInstances([string]$process)
{
@(get-process -ea silentlycontinue $process).count
}

$files = Get-ChildItem $scriptDir\*.sql

foreach ($file in $files) {
$running = numInstances("cmd")
if ($running.Count -le 2) {
$script= {& cmd /c psql "-U postgres -f $file db"}
    Start-Job $script
         write-host "$file"
} else {
     $running | Wait-Job
}
Get-Job | Receive-Job
}

вывод: psql: FATAL: роль "postgres -f D: \ Dropbox \ scripts_sql \ execute_htunion \ pwshl \ queri" не существует

Как отправить команду start .sql в psql в powershell (или на других языках)?

EDIT:
Решено в .bat с: "C: \ Program Files \ Git \ bin \ sh.exe" --login -i -c "find. -Iname '* .sql' -print0 | xargs --null --max-procs = 14 -I {} psql.exe -U postgres -d db -f {} "

1 Ответ

0 голосов
/ 19 января 2019

Git для Windows должен иметь xargs и find , которые являются командами Linux, которые в тандеме идеально подходят для этой задачи:

find . -name '*.sql' -print0 \
| xargs --null --max-procs=16 -I{} psql.exe -U postgres -d db -f {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...