Re: COPY FREEZE has no warning
От | Tom Lane |
---|---|
Тема | Re: COPY FREEZE has no warning |
Дата | |
Msg-id | 18389.1359824945@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: COPY FREEZE has no warning (Bruce Momjian <bruce@momjian.us>) |
Ответы |
Re: COPY FREEZE has no warning
|
Список | pgsql-hackers |
Bruce Momjian <bruce@momjian.us> writes: > Well, so you are saying that there really isn't any use-visible logic > for those messages to be different, No, and in fact the whole block of code is badly written because it conflates two unrelated tests. I guess somebody was trying to save a couple of nanoseconds by not calling GetCurrentSubTransactionId if a previous test had failed, but really why should we care about that number of cycles in COPY preliminaries? The code ought to be more like this: /* comment about skipping FSM or WAL here */ if (cstate->rel->rd_createSubid != InvalidSubTransactionId || cstate->rel->rd_newRelfilenodeSubid!= InvalidSubTransactionId) { hi_options |= HEAP_INSERT_SKIP_FSM; if (!XLogIsNeeded()) hi_options |= HEAP_INSERT_SKIP_WAL; } /* comment about when we can perform FREEZE here */ if (cstate->freeze) { if (!ThereAreNoPriorRegisteredSnapshots() || !ThereAreNoReadyPortals()) ereport(ERROR, (ERRCODE_INVALID_TRANSACTION_STATE, errmsg("cannot perform FREEZE becauseof prior transaction activity"))); if (cstate->rel->rd_createSubid != GetCurrentSubTransactionId() && cstate->rel->rd_newRelfilenodeSubid !=GetCurrentSubTransactionId()) ereport(ERROR, (ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE, errmsg("cannot perform FREEZE because the table was not createdor truncated in the current subtransaction"))); hi_options |= HEAP_INSERT_FROZEN; } regards, tom lane
В списке pgsql-hackers по дате отправления: