pá 18. 9. 2020 v 6:35 odesílatel Yessica Brinkmann < brinkmann.yess...@gmail.com> napsal:
> 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 > Great! These problems forward us :). It is very common so the problem is somewhere else than we are finding. Pavel > 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. >>>>>>>>> >>>>>>>>