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: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
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-26 01:06:15
Message-ID: CABrYqSNRL7mmNWPE4qBWYQ-5oFWGYNY8aEVp4YW3J09V2k1HAA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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 George Neuner 2019-10-26 04:06:00 Re: Composite type storage overhead
Previous Message ZhenHua Cai 2019-10-26 00:19:40 PostgreSQL - unrecognized win32 error code: 38