I already discovered the problem, it was only a counter initialization issue, it had nothing to do with memory contexts, that part was fine. Thank God I could already understand the problem and solve it. Anyway thank you very much. Best regards, Yessica Brinkmann
El jue., 17 sept. 2020 a las 22:26, Yessica Brinkmann (< brinkmann.yess...@gmail.com>) escribió: > Thank you very much for the answers, and for the advice given. I will try > to put them into practice. > Best regards, > Yessica Brinkmann > > > El jue., 17 sept. 2020 a las 6:46, Yessica Brinkmann (< > brinkmann.yess...@gmail.com>) escribió: > >> >> >> Good Morning. Thank you so much for the answers. Now I have to go to >> work, but when I come back I will be looking at the answers in detail, and >> I will answer. Unfortunately I have to work and study as well, so right now >> I can't see the answers in detail. >> Best regards, >> Yessica Brinkmann. >> >> >> -------- Mensaje original -------- >> Asunto: Re: Problems with MemoryContextSwitchTo () >> De: Pavel Stehule >> Para: Yessica Brinkmann >> CC: pgsql-general >> >> >> >> >> čt 17. 9. 2020 v 6:09 odesílatel Pavel Stehule <pavel.steh...@gmail.com> >> napsal: >> >>> >>> >>> čt 17. 9. 2020 v 3:16 odesílatel Yessica Brinkmann < >>> brinkmann.yess...@gmail.com> napsal: >>> >>>> Good night, >>>> Thank you very much for the answer. >>>> Excuse me please just answered, I was at my job. >>>> And yes, I get the results of the list with SPI_exec. >>>> And I am also using SPI_finish (). But I save the results of the >>>> previous query in the array idxcd-> varattnnames. >>>> And in the second foreach it should print me the values that I got in >>>> the query, since I print the values of idxcd-> varattnnames, but it is >>>> printing null. >>>> And I think the memory context switch is fine too, so I really don't >>>> know why it prints null to me. >>>> I will greatly appreciate a help please. I can't really understand why >>>> it prints null in the second foreach, even though I already tried various >>>> changes. >>>> >>> >>> do you use Postgres with active assertions ? >>> >>> postgres=# show debug_assertions ; >>> ┌──────────────────┐ >>> │ debug_assertions │ >>> ╞══════════════════╡ >>> │ on │ >>> └──────────────────┘ >>> (1 row) >>> >>> maybe you somewhere allocate less memory then it is necessary and some >>> memset rewrites memory with your data. When you have a problem with memory, >>> then you should to very carefully check a) if memory is allocated in good >>> context, b) if memory was allocated enough (sometimes I just allocated x + >>> 100000 for testing). >>> >>> Can you write a reproducer ? code that I can check at my home. Postgres >>> is pretty complex system, and it is hard to fix some issue without access >>> to code >>> >>> >> This is some messy in your code >> >> MemoryContext oldContext = MemoryContextSwitchTo( outerContext ); >> MemoryContextSwitchTo( oldContext ); >> >> Unfortunately, your code is not well structured - it is hard to read it. >> One hint - if you find an issue - try to reduce lines of your code which is >> possible until you reproduce this issue or until you understand this issue. >> >> The sequence of statements is a little bit obscure :) >> >> initStringInfo( &query ); >> >> */ >> if( cols.len > 0 ) >> { >> initStringInfo(&cols); >> } /*IF col.len>0*/ >> >> Instead >> >> foreach( cell, candidates ) /* foreach cell in candidates */ >> { >> >> int i; >> >> >> >> /*elog (INFO, "Ingresando a foreach");*/ >> idxcd = (IndexCandidate*)lfirst( cell ); >> >> if (idxcd == NULL) { >> elog( INFO, "idxcd IS NULL" ); >> continue; /* Or is that fatal enough to break instead? */ >> } >> >> >> you can write >> >> idxcd = (IndexCandidate *) linitial(candidates); >> >> The problem in your example is fact so it is a mix of copy/paste >> fragments. I wrote similar code, and almost everyone I know (when I >> started). But it is not possible to fix this code - start from scratch. The >> code must be readable (every time). And when I write code inside some >> complex environment (like Postgres is), I write code in very small >> fragments, in very small steps, and every time I try to compile, restart >> and check the result. Then I know what line, or what statement is the >> problem. >> >> Regards >> >> Pavel >> >> >> >> >> >> >>> >>> >>> >>> >>> >>> >>> Best regards, >>>> Yessica Brinkmann >>>> >>>> El mié., 16 sept. 2020 a las 9:16, Pavel Stehule (< >>>> pavel.steh...@gmail.com>) escribió: >>>> >>>>> >>>>> >>>>> st 16. 9. 2020 v 15:09 odesílatel Yessica Brinkmann < >>>>> brinkmann.yess...@gmail.com> napsal: >>>>> >>>>>> Well, the fact is that I have a function called get_columnnames, >>>>>> which in the second foreach, is printing the values of idxcd-> >>>>>> varattnnames >>>>>> [i] the null value. This is the error. >>>>> >>>>> >>>>> How you get this list? It is result of SPI_exec*** ? >>>>> >>>>> There is SPI_finish(), that cleaning a memory used by SPI interface, >>>>> and theoretically it can clean result of previous query. >>>>> >>>>> Regards >>>>> >>>>> Pavel >>>>> >>>>> >>>>>> >>>>>> -------- Mensaje original -------- >>>>>> Asunto: Re: Problems with MemoryContextSwitchTo () >>>>>> De: Pavel Stehule >>>>>> Para: Yessica Brinkmann >>>>>> CC: pgsql-general >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> st 16. 9. 2020 v 13:32 odesílatel Yessica Brinkmann < >>>>>> brinkmann.yess...@gmail.com> napsal: >>>>>> >>>>>>> Good Morning. >>>>>>> I will greatly appreciate a help please on this subject. I actually >>>>>>> did several tests already and tried a lot to fix it myself. But I >>>>>>> am not able to. And I really need to know this in order to finish >>>>>>> my university thesis. If someone can help me please. >>>>>>> Best regards, >>>>>>> Yessica Brinkmann >>>>>>> >>>>>> >>>>>> please, can you attach your code, and can you show the error message? >>>>>> >>>>>> It is hard to say what is the problem from your mail? >>>>>> >>>>>> Regards >>>>>> >>>>>> Pavel >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> El mié., 16 sept. 2020 a las 0:42, Yessica Brinkmann (< >>>>>>> brinkmann.yess...@gmail.com>) escribió: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Hello. >>>>>>>> I think several of you will already remember me. I'm the one with >>>>>>>> the IndexAdviser topic. Only that I changed my email address. >>>>>>>> As you may recall, I am doing my thesis on the subject of >>>>>>>> IndexAdviser modifications. >>>>>>>> I really appreciate the help they have given me in various >>>>>>>> Postgresql groups. >>>>>>>> Well, I was really nearing the end of the programming part of the >>>>>>>> thesis, when I had a problem to be able to compile my program in a >>>>>>>> moment, >>>>>>>> and by accident some lines of source code were moved. >>>>>>>> And for this reason, I think I have problems again with the context >>>>>>>> switch issue, since at some point my context switch stopped working >>>>>>>> for me, >>>>>>>> I think because of the issue that some lines of source code were moved. >>>>>>>> Well, the fact is that I have a function called get_columnnames, >>>>>>>> which in the second foreach, is printing the values of idxcd-> >>>>>>>> varattnnames >>>>>>>> [i] the null value. >>>>>>>> This second foreach, I only do it to test if the data is really >>>>>>>> saved well and if I can recover it properly. >>>>>>>> And since the data is not retrieved properly, or is not saved >>>>>>>> properly, in the following functions of my program, the value of >>>>>>>> idxcd-> >>>>>>>> varattnnames [i] continues to appear as null. >>>>>>>> I will appreciate a lot please help, if you can tell me please why >>>>>>>> the function prints null in the values of idxcd-> varattnnames [i], in >>>>>>>> the >>>>>>>> second foreach, if it is due to an error in the context switch, or why >>>>>>>> it >>>>>>>> could be . >>>>>>>> >>>>>>>> I send my function as an attachment. >>>>>>>> >>>>>>>> >>>>>>>> Best regards, >>>>>>>> Yessica Brinkmann. >>>>>>>> >>>>>>>