Как я могу решить эту ошибку "незафиксированный xmin 1358613895 от до xid cutoff 1601650960 должен быть заморожен" - PullRequest
0 голосов
/ 10 марта 2020

Я получаю ошибки ниже в моих postgresql файлах журнала. Ищу помощи по их исправлению.

PostgreSQL версия 9.6

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

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 <== </p>

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"

1 Ответ

0 голосов
/ 14 апреля 2020

Несколько вещей, которые вы хотели бы проверить:

  1. Найти любую давно открытую подготовленную транзакцию
    SELECT * FROM pg_prepared_xacts ;
Проверьте, есть ли у вас открытая транзакция с 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, отмените транзакцию. Если вы не можете найти длинную транзакцию, вы можете сделать одно из следующих действий: a. Выключите 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;
...