postgresql - 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 会话数据丢失。我对吗 ?有没有办法解决这个问题,在异常情况下以其他方式保留会话数据。
请指教。
解决方案
首先,我假设您的意思是 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 设置,在版本升级上少一件事情。
推荐阅读
- antd - form.setFieldsValue 将 isFieldsTouched 设置为 True
- pine-script - 如何获取窗口中当前显示的柱的最后一个柱索引?
- java - Android - 具有最小化应用程序的 AsyncTask - 重新启动?
- sql-server - 将相关子查询重写为 CROSS APPLY
- mysql - 我如何通过不提及完整的字符串来编写查询以获取列中的值
- symfony - 如何在 Symfony 5 中使用 ParamConverter 将请求中的数组分配给类属性
- batch-file - 如果我在同一个文件夹中多次使用这个批处理脚本会覆盖旧的 txt 文件吗?
- manim - 是否可以在 ImageMobject 的渲染中禁用插值?
- python - 如何在 API 调用中安全地发送用户数据
- cron - 如何每分钟运行 pm2 任务(一次)?