В Postgres 10.10 я пытаюсь выполнить вот что. Я хочу иметь файл сценария test.sql
(выполняемый \i /path/test.sql
), выполнение кода которого зависит от того, что пользователь вводит после первоначального приглашения.
Например, с кодом ниже я хотел бы, чтобы какой-то текст былechoed и создаваемая таблица, но отображаемый текст и имя таблицы должны зависеть от текста, передаваемого пользователем в качестве ввода в приглашение:
\prompt 'What is your favourite color?' answer
IF ('blue' = :answer) THEN
\echo 'It is blue! :) '
CREATE TABLE blue;
ELSE
\echo 'It is something else. :( '
CREATE TABLE :answer;
END IF;
Однако некоторые ошибки не позволяют работать:
myuser=# \i /home/myuser/test.sql
What is your favourite color?red
It is blue! :)
psql:/home/myuser/test.sql:4: ERROR: syntax error at or near "IF"
LINE 1: IF ('blue' = red) THEN
^
It is something else. :(
psql:/home/myuser/test.sql:7: ERROR: syntax error at or near "ELSE"
LINE 1: ELSE
^
psql:/home/myuser/test.sql:8: ERROR: syntax error at or near "IF"
LINE 1: END IF;
^
myuser=#
Обратите внимание, что это не то же самое, что было задано в https://dba.stackexchange.com/questions/207666/how-do-i-use-the-input-from-a-prompt-in-a-conditional-if. Кроме того, я попытался адаптировать его так, чтобы он следовал ответу в Синтаксическая ошибка Postgres на уровне или около "IF" , но тогда я просто получаю больше ошибок, начиная с «синтаксическая ошибка в или около 'DO'".
Есть ли способ для меня выполнить эту задачу? То есть, каждый раз, когда пользователь выполняет файл test.sql
с \i
, пользователю предлагается и выполнение кода в ветвях файла в зависимости от текста, который пользователь вводил с помощью приглашения?