Postgres на Windows - Как разбить командные строки PSQL на несколько строк? - PullRequest
0 голосов
/ 30 июня 2018

Я использую пакетный файл Windows для подключения к Postgres с помощью PSQL. Я выдаю такие команды ...

SET PGPASSWORD=postgres
psql -U postgres -d postgres -c "DROP USER IF EXISTS foo;"

Это прекрасно работает для запуска одной короткой команды SQL для базы данных. Но у меня проблемы с двумя смежными вопросами

  1. Как продолжить одну длинную команду SQL в несколько строк, и
  2. Как запустить несколько команд.

Пример 1 .....

psql -U postgres -d postgres -c "CREATE DATABASE foo
WITH OWNER = bar
ENCODING = 'UTF8' 
TABLESPACE = mytabspace;"

Пример 2 .....

psql -U postgres -d postgres -c "
ALTER TABLE one ALTER COLUMN X TYPE INTEGER;
ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"

Ничего из этого не будет работать, как показано, я немного погуглил и нашел несколько предложений по проделыванию этого с linux, а также экспериментировал с различными каратами, обратной косой чертой и подчеркиванием, но, похоже, не смог разделить команды через строки.

Мне известна опция -f для запуска файла, но я пытаюсь избежать этого.

Есть предложения?

1 Ответ

0 голосов
/ 30 июня 2018

Символ продолжения строки в пакете - ^. См. это Q & A

  • Итак, завершите строку пробелом + курсор ^ и убедитесь, что следующая строка начинается с пробела.

  • Вам также придется избегать областей с двойными кавычками, которые занимают несколько строк, с помощью каретки, чтобы это сработало.

    • Поскольку строка не заключена в кавычки, для парсера партии вам также придется избегать любых специальных символов, таких как <>|&, также с помощью каретки.
psql -U postgres -d postgres -c ^"CREATE DATABASE foo ^
 WITH OWNER = bar ^
 ENCODING = 'UTF8' ^
 TABLESPACE = mytabspace;"

psql -U postgres -d postgres -c ^" ^
 ALTER TABLE one ALTER COLUMN X TYPE INTEGER; ^
 ALTER TABLE two ALTER COLUMN Y TYPE INTEGER;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...