Re: I think that my data is saved correctly, but when printing again, other data appears

From: Yessica Brinkmann <yessica(dot)brinkmann(at)gmail(dot)com>
To: Joe Conway <mail(at)joeconway(dot)com>
Cc: Jony Cohen <jony(dot)cohenjo(at)gmail(dot)com>, laurenz(dot)albe(at)cybertec(dot)at, "pgsql-general(at)lists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: I think that my data is saved correctly, but when printing again, other data appears
Date: 2019-11-26 18:36:01
Message-ID: CABrYqSP6afGA=+qhrUXXJdGnSVLBD3D+7XyB+Kvs3KJg6pXnng@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I understand. Thank you very much for clearing things up.
It helps me a lot, especially point 3.
"3. When you run SPI_connect () the memory context is switched
transparently for you to a special SPI memory context. When you run
SPI_finish () the original memory context (the one in effect before
SPI_connect) is restored. "
Best regards,
Yessica Brinkmann

El mar., 26 nov. 2019 a las 15:25, Joe Conway (<mail(at)joeconway(dot)com>)
escribió:

> On 11/25/19 4:38 PM, Yessica Brinkmann wrote:
> > Well, as I was told that I should save the
> > CurrentMemoryContext before starting the SPI, Let's say it would be
> > before doing SPI_connect (). Is this correct? And then I must use
> > MemoryContextStrdup. As you told me the MemoryContextStrdup It is
> > used to create a copy of a string in a specific memory context. Well,
> > where in the source code should I use MemoryContextStrdup? After
> > doing the SPI_connect () or where? I would use it from
> > MemoryContextStrdup to copy the data variable as I understand it, But
> > in what context would I have to create the copy? In a new context or
> > what would the theme be like? Should I use AllocSetContextCreate to
> > create the new context or what would the theme be like? And if I have
> > to create the new context with AllocSetContextCreate, where in the
> > source code will I have to create it? After doing SPI_connect () or
> > where? The truth is that I also read the source code of
> > https://github.com/cohenjo/pg_idx_advisor but I don't see that The
> > MemoryContextStrdup that they told me to use has been used there.
> > Sorry for the inconvenience and see the same thing again. But as I
> > indicated, I also read the explanations they told me to read (which
> > were explanations about the memory contexts in Postgresql mainly) but
> > there were no examples of source code. And since there is nothing on
> > the Internet of examples that will help me to use, I am asking
> > again. And the truth is that I didn't find examples of this in the
> > Postgres source code, just definitions, That is the source code
> > where MemoryContextStrdup is defined. It may be very easy for you and
> > you will see it very clearly, but for me it really is not, and there
> > are no examples of use on the Internet. I really searched a lot and
> > found nothing. I would greatly appreciate a help please.
> Sorry but I am not going to try to address that wall of text ;-)
> But here is some general information about how that stuff works:
> ---------------------------------
> 1. The most common pattern is something like this:
>
> MemoryContext oldcontext;
>
> oldcontext = MemoryContextSwitchTo(<some_memory_context>);
>
> /* do stuff that allocates memory
> * using PostgreSQL allocation functions
> * e.g. palloc, pstrdup, other exported
> * backend functions, etc
> */
>
> MemoryContextSwitchTo(oldcontext);
>
> 2. MemoryContextStrdup() is similar to the above, except in that case
> you do not need MemoryContextSwitchTo(). It directly allocates into
> the specified memory context without all the switching back and
> forth. If you are simply copying one string and need it in a context
> other than what is current, it is more convenient. But either method
> could be used.
>
> 3. When you run SPI_connect() the memory context is switched
> transparently for you to a special SPI memory context. When you run
> SPI_finish() the original memory context (the one in effect before
> SPI_connect) is restored.
>
> 4. Depending on what you are trying to do, use method #1 or method #2 if
> needed, including while doing SPI related things (in between
> SPI_connect and SPI_finish)
>
> Joe
>
> --
> Crunchy Data - http://crunchydata.com
> PostgreSQL Support for Secure Enterprises
> Consulting, Training, & Open Source Development
>
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Laurenz Albe 2019-11-26 19:13:26 Re: Postgres Full Text Search Jsonb Array column does not search for first row
Previous Message Joe Conway 2019-11-26 18:25:18 Re: I think that my data is saved correctly, but when printing again, other data appears