在 Postgres 15 中,我们如何定义与业务逻辑相关的常量而不是数据库配置设置?我想在 SQL 脚本中定义它们,而不是通过psql -v MY_CONSTANT=123
命令传递,我不在乎它们是否只在会话中存在。
在以前的版本中,我悄悄地避开了以下语法:
SET MY_CONSTANT TO 123; -- declared
CALL my_func(:MY_CONSTANT); -- used
文档中的哪一个似乎是为了修改已知的数据库配置设置并解释了为什么我遇到这样的问题:
my_script.sql:2: ERROR: unrecognized configuration parameter "my_constant"
如果你想要一种“仅限 sql”的方式,那么你可以在 SQL 中使用准备好的语句。这样的;
参考:
尝试:
请注意,此语法仅在您在
psql
. 如果不这样做,请尝试以下解决方法:临时表只存在于当前会话中,注销后它将消失。
三种不同的上下文可能与您的问题有关:
DO
函数、过程或命令的代码块中的 PL/pgSQL每个范围的答案是不同的。似乎您正在混合其中至少两个。
SET
是一个 SQL 命令。您可以使用它来设置“自定义选项”。必须包含一个点 - 与 Postgres 设置 (GUC) 相对。手册:你用
SHOW
or检索它current_setting()
:text
虽然只对类型进行操作。您可能需要投射。这就是 psql 中 SQL 插值的语法,适用于 psql 变量。看:
有关的: