Тепер я читаю документ про "Обмеження ідентифікатора транзакцій", але є щось, чого я насправді не розумію, документ - це наступний URL http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html # ВАКУУМ-ДЛЯ ЗАПАСНУВАННЯ
23.1.4. Запобігання помилкам ідентифікатора транзакції
Семантика транзакцій MVCC PostgreSQL залежить від можливості порівняння номерів ідентифікатора транзакції (XID): версія рядка із вставкою XID, що перевищує XID поточної транзакції, є "в майбутньому" і не повинна бути видимою для поточної транзакції. Але оскільки ідентифікатори транзакцій мають обмежений розмір (32 біти), кластер, який працює протягом тривалого часу (понад 4 мільярди транзакцій), зазнав би обертання ідентифікатора транзакції: лічильник XID завершується до нуля, і всі раптові транзакції, що відбулися в минуле здається в майбутньому - це означає, що їх вихід стає непомітним. Словом, катастрофічні втрати даних. (Насправді дані все ще є, але це холодний комфорт, якщо ви не можете їх отримати.) Щоб цього уникнути, потрібно пилососити кожну таблицю в кожній базі даних хоча б раз на два мільярди транзакцій.
Я не розумію висловлювань "зазнав би ідентифікатор транзакції: лічильник XID завершиться до нуля, і всі раптові транзакції, що були в минулому, здаються в майбутньому - це означає, що їх вихід стає непомітним"
Хтось може це пояснити? Чому після того, як база даних зазнає ідентифікатора транзакцій, обернення, здавалося б, у майбутньому відбудуться транзакції? Коротше кажучи, я хочу знати, чи стане PostgreSQL в ситуації "втрати даних" після завершення ідентифікації транзакції автовакумом。
Для моїх особистих поглядів, ми можемо отримати поточний ідентифікатор транзакції, використовуючи функцію txid_current () для тих, хто виводить 64-бітний і не буде циклічним. Отже, я думаю, що ідентифікатор транзакції вставки з кортежів, який знає, що xmin стане нервовим більше, ніж xid, який отримують функцією tksid_current (). За винятком того, що ви будете використовувати ідентифікатор транзакції скидання pg_resetxlog після вимкнення PostgreSQL Server. Чи правий я ? Дякую