Postgres:if-else 条件取决于提示,在通过 \i 调用的 .sql 文件中
Postgres: if-else condition depending on prompt, in .sql file called via \i
使用 Postgres 10.10,这就是我想要完成的。我想要一个 test.sql
脚本文件(由 \i /path/test.sql
执行),其代码执行取决于用户在初始提示后输入的内容。
例如,对于下面的代码,我希望回显一些文本并创建一个 table,但是回显的文本和 table 名称应该取决于传递的文本用户作为提示的输入:
\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. Also, I tried adapting it to follow the answer in Postgres syntax error at or near "IF" 中的要求不同,但随后我得到了更多错误,从 "syntax error at or near 'DO'" 开始。
我有办法完成这个任务吗?也就是说,每次用户使用 \i
执行 test.sql
文件时,系统都会提示用户,文件中代码的执行会根据用户通过提示输入的文本进行分支?
像这样:
SELECT :'answer' = 'blue' AS isblue \gset
\if :isblue
...
\endif
使用 Postgres 10.10,这就是我想要完成的。我想要一个 test.sql
脚本文件(由 \i /path/test.sql
执行),其代码执行取决于用户在初始提示后输入的内容。
例如,对于下面的代码,我希望回显一些文本并创建一个 table,但是回显的文本和 table 名称应该取决于传递的文本用户作为提示的输入:
\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. Also, I tried adapting it to follow the answer in Postgres syntax error at or near "IF" 中的要求不同,但随后我得到了更多错误,从 "syntax error at or near 'DO'" 开始。
我有办法完成这个任务吗?也就是说,每次用户使用 \i
执行 test.sql
文件时,系统都会提示用户,文件中代码的执行会根据用户通过提示输入的文本进行分支?
像这样:
SELECT :'answer' = 'blue' AS isblue \gset
\if :isblue
...
\endif