Yessica Brinkmann <yessica.brinkmann@xxxxxxxxx> 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