Thank you very much for your answer. It helped me. Really now the get_columnnames function is already working and ends cleanly. I have an error in the following function to be executed that generates the same error: The connection to the server was lost. Attempting reset: Failed. I will try to solve it alone and if I cannot write another new mail thread. Because this problem of get_columnnames is already solved. Many thanks, Best regards, Yessica Brinkmann
El jue., 10 oct. 2019 a las 13:15, Alban Hertroys (<haram...@gmail.com>) escribió: > > > On 10 Oct 2019, at 17:55, Yessica Brinkmann <yessica.brinkm...@gmail.com> > wrote: > > > > I really thought a lot, but I don't understand why but the function > fails after the expression is executed: > > appendStringInfo (& cols, "% s a.attnum =% d", (i> 0? "OR": ""), idxcd-> > varattno [i]); > > The error appears only to me when entering the cycle: > > foreach (cell, candidates) / * foreach cell in candidates * / > > more than once, that is, when you have more than one candidate index. If > the cycle is entered only once, the function works correctly. > > The error that appears to me is that the connection to the PostgreSQL > server is directly lost. I proved that the error occurs in that statement, > printing some values. > > There is probably an error in the Postgres log-file providing you more > info. > > That said, at least the below bit in your code is dangerous: > > foreach( cell, candidates ) /* foreach cell in candidates */ > { > > idxcd = (IndexCandidate*)lfirst( cell ); > > if( !idxcd->idxused ) > continue; > > if (idxcd!=NULL) > { > > > You should at least check for NULL before referencing an attribute of that > structure. Personally, I would invert the test like so (and then move it > before the idxused test: > > if (idxcd == NULL) { > elog( INFO, "idxcd IS NULL" ); > continue; /* Or is that fatal enough to break instead? */ > ) > > if (!idxcd->idxused) > continue; > > > > Alban Hertroys > -- > There is always an exception to always. > > > > >