【问题标题】:Postgres Session data on exceptionPostgres 会话数据异常
【发布时间】:2020-09-27 10:57:04
【问题描述】:

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

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

请指教。

【问题讨论】:

  • 遇到异常时是否关闭数据库会话?这可以解释你所看到的。
  • 不,我不会关闭会话。

标签: postgresql exception


【解决方案1】:

首先我假设您的意思是 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 设置,在版本升级上少一件事情。

【讨论】:

  • 关于您提供的永久表解决方案,即使永久表中的插入丢失,问题也是异常的。有没有办法可以将插入保存在该特定表上,并让其他事务在异常时消失。
  • 你还没有说你在哪里引发异常。如果是 plpgsql 函数,请查看:postgresql.org/docs/12/…。否则,您将需要给出一个完整的例子来说明您正在做什么。
猜你喜欢
  • 2013-11-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2013-03-06
  • 1970-01-01
  • 2022-07-23
  • 2017-06-17
相关资源
最近更新 更多