Как избежать этой команды в командном файле? - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу динамически генерировать набор переключателей для PG_DUMP, как показано ниже:

--table=mySchema.foo --table=mySchema.bar ...

Однако я хочу ограничить эти переключатели только представлениями.Имена видов не соответствуют шаблону.Все они находятся в одной схеме с именем mySchema.

Вот сценарий пакетного файла, который я написал:

@echo off

set PARAM_HOTE=localhost

set PARAM_PORT=5435

set PSQL="C:\Program Files\PostgreSQL\9.4\bin\psql.exe"

set SQL_QUERY=^
select string_agg( '--table=' || quote_ident(nspname) || '.' || quote_ident(relname), ' ' )^
  from (^
      select *^
        from pg_class^
        join pg_namespace on pg_namespace.oid = pg_class.relnamespace^
       where relkind = 'v'^
         and nspname = 'mySchema'^
    order by relname ASC^
  ) infos_vues^
;

for /f %%i in ('"%PSQL%" --quiet --tuples-only --host %PARAM_HOTE% --port %PARAM_PORT% --username "rec" -c "%SQL_QUERY%" db') do set PG_DUMP_SWITCHES_FOR_VIEWS_ONLY=%%i

:: Call PG_DUMP...

Когда я его запускаю, я получаю следующую ошибку:

'"C:\Program Files\PostgreSQL\9.4\bin\psql.exe"" -c "select' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

1 Ответ

0 голосов
/ 28 ноября 2018

Вот как я решил свою проблему:

@echo off

set PARAM_HOTE=localhost

set PARAM_PORT=5435

set PSQL="C:\Program Files\PostgreSQL\9.2\bin\psql.exe"

set SQL_LISTE_VUES=^
select string_agg( concat('--table=' , quote_ident(nspname) , '.' , quote_ident(relname)), ' ' )^
  from (^
      select *^
        from pg_class^
        join pg_namespace on pg_namespace.oid = pg_class.relnamespace^
       where relkind = 'v'^
         and nspname = 'rec'^
    order by relname ASC^
  ) infos_vues^
;

for /f  "usebackq delims=" %%i in (`%%PSQL%% --quiet --tuples-only --host %PARAM_HOTE% --port %PARAM_PORT% --username "rec" -c "%SQL_LISTE_VUES%" REC`) do set LISTE_VUES=%%i
echo %LISTE_VUES%
  • Я переписал свой запрос, заменив || на функцию concat
  • Я использовал обратные тики
  • Я сбежал % с %% в команде for
...