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: Jony Cohen <jony(dot)cohenjo(at)gmail(dot)com>, laurenz(dot)albe(at)cybertec(dot)at
Cc: "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-10-28 00:01:50
Message-ID: CABrYqSNNhfY0QxKZKaDh3FAtEmZ4LzqO3Zq98-+pbFG32u84BQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thank you so much for the answers.
By telling me this: "MemoryContextStrdup enables you to create a copy of a
string in an explicitly specified memory context." I better understood the
function of MemoryContextStrdup.
And thank you very much to Mr. Jony Cohen for giving me the reference of
his work. I really was already researching about his work, and I included
it in the state of the art of my thesis, but I didn't look at the source
code.
I will be looking at the source code for a help, and especially in this
case to see for the moment, the maintenance of the context for its
subsequent restoration.
Regards,
Yessica Brinkmann

El dom., 27 oct. 2019 a las 19:42, Jony Cohen (<jony(dot)cohenjo(at)gmail(dot)com>)
escribió:

> Hi,
> Worked on something similar a few years back, have a look - it might give
> you a few pointers :)
> It's on similar lines to what you are looking at (I kept it updated up to
> PG version 9.4/9.5)
> https://github.com/cohenjo/pg_idx_advisor
>
> My main focus was to add support for more index types: partial,
> functional, CTE, composites etc...
> (I also had to keep the original context to restore it - so I think you
> will find a sample to what you are looking for... )
>
> there's also https://github.com/HypoPG/hypopg which is
> actively maintained.
> I think you will find code samples even up to the latest versions here...
>
> Regards,
> - Jony
>
> On Sat, Oct 26, 2019 at 4:06 AM Yessica Brinkmann <
> yessica(dot)brinkmann(at)gmail(dot)com> wrote:
>
>> Good evening, sorry for the delay in answering. I have a part-time job
>> and I was at it.
>> I understand what you tell me about the "data" value is just a pointer
>> into the tupdesc associated with the SPI result, and that disappears the
>> moment I do SPI_finish ().
>> What I do not understand well is how to use CurrentMemoryContext and
>> MemoryContextStrdup, since there are not many examples of using them on the
>> Internet (most are only definitions) and it is the first time I have heard
>> of this, although I already understand this part now of contexts, because I
>> was reading on the subject.
>> Could you please give me an example of use?
>> Best Regards,
>> Yessica Brinkmann
>>
>> El vie., 25 oct. 2019 a las 12:24, Yessica Brinkmann (<
>> yessica(dot)brinkmann(at)gmail(dot)com>) escribió:
>>
>>> Thank you so much for your answer. I will be testing the indicated and
>>> then I give you return.
>>> Best regards,
>>>
>>> Yessica Brinkmann
>>>
>>>
>>> -------- Mensaje original --------
>>> Asunto: Re: I think that my data is saved correctly, but when printing
>>> again, other data appears
>>> De: Tom Lane
>>> Para: Yessica Brinkmann
>>> CC: pgsql-general(at)lists(dot)postgresql(dot)org
>>>
>>>
>>> Yessica Brinkmann writes:
>>> > I have a function called get_columnnames, which runs on a Postgresql
>>> server
>>> > and returns the names of the columns of a table in a Postgresql
>>> database.
>>> > In the first foreach, in the statement: idxcd-> varattnames [cont] =
>>> data;
>>> > column names are saved. Those column names are saved correctly. I could
>>> > verify this by printing some values.
>>> > But later, in the following foreach, when I reprint the values of the
>>> names
>>> > of the columns that had been saved in the idxcd-> varattnames [cont] =
>>> data
>>> > statement; They appear to me with errors.
>>>
>>> Yeah, because the "data" value is just a pointer into the tupdesc
>>> associated with the SPI result, and that disappears the moment you
>>> do SPI_finish(). You'd need to do something to copy the strings
>>> into a longer-lived context. A plain pstrdup() won't suffice
>>> because you're in a short-lived SPI context already inside that
>>> loop; but you could save CurrentMemoryContext before starting up
>>> SPI and then use MemoryContextStrdup.
>>>
>>> regards, tom lane
>>>
>>>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joe Conway 2019-10-28 11:03:21 Re: I think that my data is saved correctly, but when printing again, other data appears
Previous Message Adrian Klaver 2019-10-27 23:54:54 Re: SQL pretty pritner?