Postgres:if-else 条件取决于提示,在通过 \i 调用的 .sql 文件中
Posted
技术标签:
【中文标题】Postgres:if-else 条件取决于提示,在通过 \\i 调用的 .sql 文件中【英文标题】:Postgres: if-else condition depending on prompt, in .sql file called via \iPostgres:if-else 条件取决于提示,在通过 \i 调用的 .sql 文件中 【发布时间】:2019-10-16 07:03:54 【问题描述】:使用 Postgres 10.10,这就是我想要完成的任务。我想要一个test.sql
脚本文件(由\i /path/test.sql
执行),其代码执行取决于用户在初始提示后输入的内容。
例如,对于下面的代码,我想回显一些文本并创建一个表,但回显的文本和表名应该取决于用户传递的文本作为提示的输入:
\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 你最喜欢的颜色是什么?红色 它是蓝色的! :) psql:/home/myuser/test.sql:4:错误:“IF”或附近的语法错误 第 1 行:如果(“蓝色”= 红色)那么 ^ 这是另外一回事。 :( psql:/home/myuser/test.sql:7:错误:“ELSE”或附近的语法错误 第 1 行:否则 ^ psql:/home/myuser/test.sql:8:错误:“IF”或附近的语法错误 第 1 行:如果结束; ^ 我的用户=#
请注意,这与https://dba.stackexchange.com/questions/207666/how-do-i-use-the-input-from-a-prompt-in-a-conditional-if 中的要求不同。此外,我尝试对其进行调整以遵循Postgres syntax error at or near "IF" 中的答案,但随后我得到了更多错误,从“'DO' 处或附近的语法错误”开始。
有没有办法让我完成这项任务?也就是说,每次用户使用\i
执行test.sql
文件时,都会提示用户,并且文件内代码的执行会根据用户通过提示输入的文本进行分支?
【问题讨论】:
SQL 中没有IF
。但是psql
提供了一个\if
postgresql.org/docs/current/app-psql.html#PSQL-METACOMMAND-IF
@a_horse_with_no_name 唯一的问题是如何将answer == 'blue'
转换为布尔值以与\if
一起使用。我只在dba.stackexchange.com/questions/207666/… 中看到对此类问题的引用,但该答案在这里没有帮助
【参考方案1】:
类似这样的:
SELECT :'answer' = 'blue' AS isblue \gset
\if :isblue
...
\endif
【讨论】:
以上是关于Postgres:if-else 条件取决于提示,在通过 \i 调用的 .sql 文件中的主要内容,如果未能解决你的问题,请参考以下文章