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.brinkm...@gmail.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.brinkm...@gmail.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@lists.postgresql.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 >> >>