Re: Binary support for pgoutput plugin - Mailing list pgsql-hackers
From | Petr Jelinek |
---|---|
Subject | Re: Binary support for pgoutput plugin |
Date | |
Msg-id | a7b64770-1346-c672-d328-50582d6b8e1f@2ndquadrant.com Whole thread Raw |
In response to | Re: Binary support for pgoutput plugin (Dave Cramer <davecramer@gmail.com>) |
Responses |
Re: Binary support for pgoutput plugin
|
List | pgsql-hackers |
Hi, On 08/03/2020 00:18, Dave Cramer wrote: > On Fri, 6 Mar 2020 at 08:54, Petr Jelinek <petr@2ndquadrant.com > <mailto:petr@2ndquadrant.com>> wrote: > > Hi Dave, > > On 29/02/2020 18:44, Dave Cramer wrote: > > > > > > rebased and removed the catversion bump. > > Looked into this and it generally seems okay, but I do have one > gripe here: > > > + tuple->values[i].data = > palloc(len + 1); > > + /* and data */ > > + > > + pq_copymsgbytes(in, > tuple->values[i].data, len); > > + tuple->values[i].len = len; > > + tuple->values[i].cursor = 0; > > + tuple->values[i].maxlen = len; > > + /* not strictly necessary > but the docs say it is required */ > > + tuple->values[i].data[len] > = '\0'; > > + break; > > + } > > + case 't': /* text > formatted value */ > > + { > > + tuple->changed[i] = true; > > + int len = pq_getmsgint(in, > 4); /* read length */ > > > > /* and data */ > > - tuple->values[i] = > palloc(len + 1); > > - pq_copymsgbytes(in, > tuple->values[i], len); > > - tuple->values[i][len] = '\0'; > > + tuple->values[i].data = > palloc(len + 1); > > + pq_copymsgbytes(in, > tuple->values[i].data, len); > > + tuple->values[i].data[len] > = '\0'; > > + tuple->values[i].len = len; > > The cursor should be set to 0 in the text formatted case too if this is > how we chose to encode data. > > However I am not quite convinced I like the StringInfoData usage here. > Why not just change the struct to include additional array of lengths > rather than replacing the existing values array with StringInfoData > array, that seems generally both simpler and should have smaller memory > footprint too, no? > > > Can you explain this a bit more? I don't really see a huge difference in > memory usage. > We still need length and the data copied into LogicalRepTupleData when > sending the data in binary, no? > Yes but we don't need to have fixed sized array of 1600 elements that contains maxlen and cursor positions of the StringInfoData struct which we don't use for anything AFAICS. -- Petr Jelinek 2ndQuadrant - PostgreSQL Solutions for the Enterprise https://www.2ndQuadrant.com/
pgsql-hackers by date: