vaa*_*aab 14 postgresql transaction
我正在使用 postgres SAVEPOINT,它在当前事务中创建一个新的保存点,并希望在连接中显示当前定义的保存点列表。
更准确地说:我想检查哪个名称不会在连接中触发“没有这样的保存点”错误。
Jos*_*idt 10
有趣的问题!简短的回答:没有。
长答案:似乎没有任何现有的方法来获取定义的保存点列表。更糟糕的是,似乎不可能创建一个 PostgreSQL 扩展来让你这样做:查看src/backend/access/transam/xact.c,你可以看到像 RollbackToSavepoint 这样的函数(这就是“没有这样的savepoint”错误消息来自)依赖于变量 CurrentTransactionState,该变量对 xact.c 声明为静态,即对扩展代码全局不可见。
现在,如果您大胆并且非常渴望从服务器端生成已定义保存点的列表(而不是让您的客户端记住...),您可以向 xact.c 添加一个辅助函数来显示它给你的信息。事实上,这里就是这样一个补丁。这是一个非常粗略的补丁,仅用于说明目的,只是记录保存点名称,它真的应该将这些名称作为 setof 文本返回。
至于为什么缺少此功能,我推测对于需要从服务器获取已定义保存点列表的客户端来说,根本没有合理的用例。客户会用这个列表做什么——只需随机选择一个ROLLBACK
就行了?ROLLBACK
一味地到最后一个?AFAICT 保存点只有在客户端记住它定义了哪些保存点以及它们在哪里以便能够使用它们时才有用。
归档时间: |
|
查看次数: |
2063 次 |
最近记录: |