Re: POC PATCH: copy from ... exceptions to: (was Re: VLDB Features)
Danil Anisimow <anisimow.d@gmail.com>
From: Danil Anisimow <anisimow.d@gmail.com>
To: Damir Belyalov <dam.bel07@gmail.com>
Cc: torikoshia <torikoshia@oss.nttdata.com>, "a.lepikhov@postgrespro.ru" <a.lepikhov@postgrespro.ru>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2022-12-09T14:25:34Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
doc: Fix COPY ON_ERROR option syntax synopsis.
- f6f8ac8e75c9 17.0 landed
-
Disallow specifying ON_ERROR option without value.
- a6d0fa5ef840 17.0 landed
-
Rename COPY option from SAVE_ERROR_TO to ON_ERROR
- b725b7eec431 17.0 landed
-
Fix spelling in notice
- 58fbbc9d683c 17.0 landed
-
Add new COPY option SAVE_ERROR_TO
- 9e2d8701194f 17.0 landed
Hi! I have looked at your patch and have a few questions. 110: static bool SafeCopying(CopyFromState cstate, ExprContext *econtext, 111: TupleTableSlot *myslot); --- 636: bool 637: SafeCopying(CopyFromState cstate, ExprContext *econtext, TupleTableSlot *myslot) Why is there no static keyword in the definition of the SafeCopying() function, but it is in the function declaration. 675: MemoryContext cxt = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory); 676: 677: valid_row = NextCopyFrom(cstate, econtext, myslot->tts_values, myslot->tts_isnull); 678: tuple_is_valid = valid_row; 679: 680: if (valid_row) 681: sfcstate->safeBufferBytes += cstate->line_buf.len; 682: 683: CurrentMemoryContext = cxt; Why are you using a direct assignment to CurrentMemoryContext instead of using the MemoryContextSwitchTo function in the SafeCopying() routine? 1160: /* Standard copying with option "safe copying" enabled by IGNORE_ERRORS. */ 1161: if (!SafeCopying(cstate, econtext, myslot)) 1162: break; I checked with GDB that the CurrentMemoryContext changes when SafeCopying returns. And the target context may be different each time you do a COPY in psql. 1879: cstate->sfcstate->safe_cxt = AllocSetContextCreate(oldcontext, 1880: "Safe_context", 1881: ALLOCSET_DEFAULT_SIZES); When you initialize the cstate->sfcstate structure, you create a cstate->sfcstate->safe_cxt memory context that inherits from oldcontext. Was it intended to use cstate->copycontext as the parent context here? On Wed, Nov 2, 2022 at 11:46 AM Damir Belyalov <dam.bel07@gmail.com> wrote: > Updated the patch: > - Optimized and simplified logic of IGNORE_ERRORS > - Changed variable names to more understandable ones > - Added an analogue of MAX_BUFFERED_BYTES for safe buffer > > > Regards, > Damir Belyalov > Postgres Professional > Regards, Daniil Anisimov Postgres Professional