Postgres: условие if-else, зависящее от приглашения, в файле .sql, вызываемом через \ i - PullRequest
0 голосов
/ 16 октября 2019

В 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, пользователю предлагается и выполнение кода в ветвях файла в зависимости от текста, который пользователь вводил с помощью приглашения?

1 Ответ

1 голос
/ 16 октября 2019

Примерно так:

SELECT :'answer' = 'blue' AS isblue \gset
\if :isblue
   ...
\endif
...