Answers:
有趣的问题!简短的回答:不。
长答案:似乎没有任何现有方法可以获取定义的保存点列表。更糟糕的是,似乎无法创建允许您执行此操作的PostgreSQL扩展:查看src / backend / access / transam / xact.c,您可以看到类似RollbackToSavepoint的功能(在该功能中“保存消息”(您提到的错误消息来自)依赖于变量CurrentTransactionState,该变量对xact.c声明为静态,即,扩展代码不会在全局上看到它。
现在,如果您敢于并且非常渴望从服务器端生成已定义的保存点的列表(而不是仅仅让您的客户端记住...),则可以在xact.c中添加一个辅助函数,以显示此内容。给您的信息。实际上,这里就是这样的补丁。这是一个非常粗糙的补丁,仅用于说明目的,并且仅记录保存点名称,它实际上应该将这些名称作为setof文本返回。
至于为什么缺少此功能,我想对于需要从服务器获取定义的保存点列表的客户端来说,根本就没有合理的用例。客户将如何处理此列表-只需随机选择一个ROLLBACK
即可?ROLLBACK
到最后一个盲目?AFAICT保存点仅在客户记住其定义的保存点以及可以使用这些保存点的位置时才有用。