Re: Why copy_relation_data only use wal when WALarchiving is enabled

Поиск
Список
Период
Сортировка
От Florian G. Pflug
Тема Re: Why copy_relation_data only use wal when WALarchiving is enabled
Дата
Msg-id 4716154F.3030001@phlo.org
обсуждение исходный текст
Ответ на Re: Why copy_relation_data only use wal when WALarchiving is enabled  (Simon Riggs <simon@2ndquadrant.com>)
Список pgsql-hackers
Simon Riggs wrote:
> On Wed, 2007-10-17 at 12:11 +0100, Heikki Linnakangas wrote:
>> Simon Riggs wrote:
>>> On Wed, 2007-10-17 at 17:18 +0800, Jacky Leng wrote:
>>>> Second, suppose that no checkpoint has occured during the upper 
>>>> series--authough not quite possible;
>>> That part is irrelevant. It's forced out to disk and doesn't need 
>>> recovery, with or without the checkpoint.
>>> 
>>> There's no hole that I can see.
>> No, Jacky is right. The same problem exists at least with CLUSTER, and I 
>> think there's other commands that rely on immediate fsync as well.
>> 
>> Attached is a shell script that demonstrates the problem on CVS HEAD with
>> CLUSTER. It creates two tables, T1 and T2, both with one row. Then T1 is
>> dropped, and T2 is CLUSTERed, so that the new T2 relation file happens to
>> get the same relfilenode that T1 had. Then we crash the server, forcing a
>> WAL replay. After that, T2 is empty. Oops.
>> 
>> Unfortunately I don't see any easy way to fix it.
> 
> So, what you are saying is that re-using relfilenodes can cause problems 
> during recovery in any command that alters the relfilenode of a relation?

For what I understand, I'd say that creating a relfilenode *and* subsequently
inserting data without WAL-logging causes the problem. If the relfilenode was
recently deleted, the inserts might be effectively undone upon recovery (because
we first replay the delete), but later *not* redone (because we didn't WAL-log
the inserts).

That brings me to another idea from a fix that is less heavyweight than my
previous checkpoint-before-commit suggestion.

We could make relfilenodes globally unique if we added the xid and epoch of the
creating transaction to the filename. Those are 64 bits, so if we encode them
in base 36 (using A-Z,0-9), that'd increase the length of the filenames by 13.

regards, Florian Pflug



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Kevin Grittner"
Дата:
Сообщение: Re: CVS and Eclipse
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: Why copy_relation_data only use wal whenWALarchiving is enabled