1

我在我的 postgresql 日志文件中收到以下错误。寻求有关如何修复它们的帮助。

PostgreSQL 版本是 9.6

==> postgresql-2020-03-10.log <==

2020-03-10 10:48:19 EAT|||ERROR:  uncommitted xmin 1358613895 from before xid cutoff 1601650960 needs to be frozen
2020-03-10 10:48:19 EAT|||CONTEXT:  automatic vacuum of table "schema.public.tablename"

==> postgresql-2020-03-10.csv <==

2020-03-10 10:48:19.140 EAT,,,22943,,5e67463b.599f,1,,2020-03-10 10:48:11 EAT,13/281,0,ERROR,XX001,"uncommitted xmin 1358613895 from before xid cutoff 1601650960 needs to be frozen",,,,,"automatic vacuum of table "schema.public.tablename"
4

1 回答 1

1

您想要验证的几件事:

  1. 查找任何长时间打开的准备好的事务
    SELECT * FROM pg_prepared_xacts ;
  1. 检查您是否与 1358613895 有任何未结交易
SELECT * FROM pg_stat_activity WHERE backend_xid = 1358613895 OR backend_xmin = 1358613895

或者

SELECT * FROM pg_stat_activity WHERE now() - xact_start <= INTERVAL '1 days'

如果您使用上述 SQL 发现任何长事务,则取消该事务。如果您无法找到任何长期交易,那么您可以选择以下方法之一:关闭 Postgres 并以单用户模式运行 PostgreSQL 并执行 VACUUM 操作。湾。在一个事务中,执行以下操作

     BEGIN;
     CREATE TABLE public.tablename_copy AS SELECT * FROM public.tablename;
     TRUNCATE TABLE public.tablename;
     INSERT INTO public.tablename SELECT * FROM public.tablename_copy;
     DROP TABLE public.tablename_copy;
     END;
 -- OR ---
     BEGIN;
     COPY public.tablename TO '/tmp/tablename.data';
     TRUNCATE TABLE public.tablename;
     COPY public.tablename FROM '/tmp/tablename.data';
     END;

履行

VACUUM FREEZE ANALYZE;
于 2020-04-14T17:51:12.103 回答