Re: Problems with MemoryContextSwitchTo ()

From: Yessica Brinkmann <brinkmann(dot)yessica(at)gmail(dot)com>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Problems with MemoryContextSwitchTo ()
Date: 2020-09-18 02:26:34
Message-ID: CAOR+mcdfgt3mTJBUkm2bqX_bo8n=EqAHa_Ztfp+Hs1ESxsbqLA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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(dot)yessica(at)gmail(dot)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(dot)stehule(at)gmail(dot)com>
> napsal:
>
>>
>>
>> čt 17. 9. 2020 v 3:16 odesílatel Yessica Brinkmann <
>> brinkmann(dot)yessica(at)gmail(dot)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(dot)stehule(at)gmail(dot)com>) escribió:
>>>
>>>>
>>>>
>>>> st 16. 9. 2020 v 15:09 odesílatel Yessica Brinkmann <
>>>> brinkmann(dot)yessica(at)gmail(dot)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(dot)yessica(at)gmail(dot)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(dot)yessica(at)gmail(dot)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.
>>>>>>>
>>>>>>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Yessica Brinkmann 2020-09-18 04:35:06 Re: Problems with MemoryContextSwitchTo ()
Previous Message raf 2020-09-18 00:45:29 Re: PostgreSQL processes use large amount of private memory on Windows