That is, It worked by changing the code to: if (idxcd == NULL) { elog( INFO, "idxcd IS NULL" ); continue; /* Or is that fatal enough to break instead? */ }
if (!idxcd->idxused) continue; Very thanks, Yessica Brinkmann El jue., 10 oct. 2019 a las 16:43, Yessica Brinkmann (< yessica.brinkm...@gmail.com>) escribió: > 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. >> >> >> >> >>