首页 > 解决方案 > Postgres 会话数据异常

问题描述

我在 postgres.conf 文件中有一个会话变量,user.user_id = 0。我将其设置为 1234 使用set_config('user.user_id', '1234'::text, FALSE)

问题是当我使用 RAISE EXCEPTION 时,或者如果代码中有任何 EXCEPTION 的值current_setting('user.user_id')被返回为 0(值被重置),我什至尝试使用临时表并将会话数据 user.user_id 存储在表中,我什至在异常时丢失了 TEMP 表(获取错误:关系不存在),我的理解是在 EXCEPTION 会话数据丢失。我对吗 ?有没有办法解决这个问题,在异常情况下以其他方式保留会话数据。

请指教。

标签: postgresqlexception

解决方案


首先,我假设您的意思是 postgresql.conf 而不是 postgres.conf。其次,这些设置是全局的。您使用 set_config 使其特定于会话:

https://www.postgresql.org/docs/12/functions-admin.html#FUNCTIONS-ADMIN-SET

"set_config 将参数setting_name 设置为new_value。如果is_local 为true,则新值只适用于当前事务。如果希望新值适用于当前会话,请改用false。"

TEMP 表也是特定于会话/事务的,具体取决于它们的创建方式。如果要保留该信息,则需要将其存储在永久表中。那时我可能会摆脱 postgresql.conf 设置,在版本升级上少一件事情。


推荐阅读