Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT
Дата
Msg-id CA+TgmoajveF03pgPwPO2=OQswcGO3M8-BwymwR9kA==r4bpaMA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT  (Heikki Linnakangas <hlinnakangas@vmware.com>)
Ответы Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT  (Heikki Linnakangas <hlinnakangas@vmware.com>)
Список pgsql-hackers
On Mon, Jan 28, 2013 at 8:39 AM, Heikki Linnakangas
<hlinnakangas@vmware.com> wrote:
> On 15.01.2013 21:03, Tom Lane wrote:
>> Robert Haas<robertmhaas@gmail.com>  writes:
>>>
>>> On the third hand, the fact that a table is OCDR is recorded in
>>> backend-local storage somewhere, and that storage (unlike the
>>> relcache) had better be reliable.  So maybe there's some way to
>>> finesse it that way.
>>
>> Hm, keep a flag in that storage you mean?  Yeah, that could possibly
>> work.
>
> Sounds reasonable.
>
> Until someone gets around to write a patch along those lines, I'm inclined
> to apply this one liner:
>
> *** a/src/backend/commands/tablecmds.c
> --- b/src/backend/commands/tablecmds.c
> ***************
> *** 10124,10130 **** PreCommit_on_commit_actions(void)
>                                 /* Do nothing (there shouldn't be such
> entries, actually) */
>                                 break;
>                         case ONCOMMIT_DELETE_ROWS:
> !                               oids_to_truncate =
> lappend_oid(oids_to_truncate, oc->relid);
>                                 break;
>                         case ONCOMMIT_DROP:
>                                 {
> --- 10124,10136 ----
>                                 /* Do nothing (there shouldn't be such
> entries, actually) */
>                                 break;
>                         case ONCOMMIT_DELETE_ROWS:
> !                               /*
> !                                * If this transaction hasn't accessed any
> temporary relations,
> !                                * we can skip truncating ON COMMIT DELETE
> ROWS tables, as
> !                                * they must still be empty.
> !                                */
> !                               if (MyXactAccessedTempRel)
> !                                       oids_to_truncate =
> lappend_oid(oids_to_truncate, oc->relid);
>                                 break;
>                         case ONCOMMIT_DROP:
>                                 {
>
> We already have that MyXactAccessedTempRel global flag. Just checking that
> should cover many common cases.

+1 for that.  I'm actually unconvinced that we need to do any better
than that in general.  But certainly that seems like a good first
step.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: unlogged tables vs. GIST
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: pg_ctl idempotent option