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 (<haramrae@gmail.com>) escribió:
> On 10 Oct 2019, at 17:55, Yessica Brinkmann <yessica.brinkmann@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:
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.