Справочная информация:
ОС 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 {} "