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. >>>>>>> >>>>>>