设置会话 - 用于存储用户 ID 的自定义变量

use*_*521 11 postgresql postgresql-9.4

我想将用户 ID 存储在自定义会话变量中,并在触发器过程中使用(读取)它来授权用户操作。我发现了这样的东西:

set session "myapp.user" = '12345';
...
SELECT current_setting('myapp.user');
Run Code Online (Sandbox Code Playgroud)

它似乎有效 - 我认为“myapp.user”应该在 .conf 文件中声明,但似乎我可以即时创建会话变量(我根本没有更改 .conf 文件)。

这样做有什么坏处吗?

Mat*_*sOl 9

在 9.2 版之前,您需要将自定义类变量添加到custom_variable_classes参数 in 中postgresql.conf,例如:

custom_variable_classes = 'myapp'
Run Code Online (Sandbox Code Playgroud)

9.2 中,此要求已被删除

删除 custom_variable_classes 参数 (Tom Lane)

此设置提供的检查是可疑的。现在任何设置都可以以任何类名作为前缀。

因此,从 9.2 开始,您可以像当前一样设置自定义类变量,无需担心更改postgresql.conf.