GCP 自己解决 PostgreSQL 事务 ID 环绕保护的指南对我不起作用

问题描述 投票:0回答:1

我在 GCP 上运行的 PostreSQL 实例遇到错误。

它表示“此实例上的事务 ID 利用率接近 100%,之后 PostgreSQL 将停止接受写入查询。”

我不可以进行任何操作。

GCP 然而轻松地向我指出了本指南:

https://cloud.google.com/sql/docs/postgres/txid-wraparound

我跟着它直到接近开头的那一点,它告诉我从 pg_temp_* 模式中删除我的表: enter image description here

当我尝试使用此查询时:

SET cloudsql.enable_maintenance_mode = 'on'; /* 获取额外的交易 ID */ 删除表 pg_temp_151.tmp_map_match;

我收到以下错误:

错误:架构 pg_temp_151 的权限被拒绝 SQL 状态:42501

因此我一直没有解决问题。我也完成了其余的提示和技巧,但没有解决任何问题。所以我认为这仍然是问题所在。

有什么想法吗?非常感谢您的帮助

postgresql google-cloud-platform google-cloud-sql
1个回答
0
投票

您的客户需要关闭会话以孤立

pg_temp
,以便
vacuum
拾取并擦除它们。或者,假设您对客户端代码有控制权或影响力,那么一旦不再需要它们,他们就需要开始显式地删除它们的
temp
资源。在这种情况下,您还可以考虑使用自己的常规模式,并将
unlogged
对象放入其中,这将允许超级用户更轻松地检查和擦除它们 - 相同的性能,更多的控制,但代价是方便。

客户端代码可能依赖于以下事实:创建为

temporary
的资源将在会话结束时“自动”删除,同时仍然使用重复使用会话的池,而无需定期关闭和重新打开它们。 错误消息和手册都提到进入单用户模式,这意味着强制断开除您之外的所有正在进行的会话。一旦这些会话消失,它们的所有

pg_temp

都可以通过手动启动或自动触发

vacuum
进行清理,而不是手动删除。
要操纵某人的 

pg_temp

,您必须插入拥有特定

pg_temp
模式的会话 - PostgreSQL 的设计甚至不允许超级用户这样做。接管会话并不意味着以同一用户的身份进行连接,而是意味着劫持特定的现有连接。
    

© www.soinside.com 2019 - 2024. All rights reserved.