为整个脚本声明变量

Dar*_*roo 1 postgresql postgresql-10

我有一个 PostgreSQL 10 脚本,我想在开始时为其声明一次变量,然后在整个脚本中使用它们(带有可能的事务)。

我知道我可以做到:

DO $$
DECLARE test float := 0.1 ;
BEGIN
    < do whatever here>
END $$
Run Code Online (Sandbox Code Playgroud)

但这使我每次有 BEGIN / END 块时都声明变量。

Erw*_*ter 6

Postgres本身没有全局变量。但我们有“定制选项”,可以为此目的进行拉伸。

SET myvars.test TO '0.1';
Run Code Online (Sandbox Code Playgroud)

会话期间持续存在(不仅仅是事务)。与:

SELECT current_setting('myvars.test')::float;
Run Code Online (Sandbox Code Playgroud)

请注意,值存储为text. 因此,您可能需要按演示进行转换。

为了避免在引用未设置变量时出现异常并NULL改为获取:

SELECT current_setting('myvars.test', true)::float;
Run Code Online (Sandbox Code Playgroud)

看:

还有许多其他解决方法: