Thread: Generating Huge String?

Generating Huge String?

From
Steffen Nielsen
Date:
I have tried using chunks technique when creating huge string for a stored 
procedure (C code). I work like charm for small string, but when i create 
large strings i get a "server closed the connection unexpectedly" :-( I use 
palloc and repalloc for memory handling. Note! I made a standard C program 
that just keept on making the chunk larger (read string), i never did crash 
any. So what is postgres doing? (ps. the same happens if I use standard malloc 
an realloc)

Any ideas why? (No continues block of memory is large enough or?)
And how does one normally handle Large strings in postgres?

\Steffen Nielsen


Re: Generating Huge String?

From
Tom Lane
Date:
Steffen Nielsen <styf@cs.auc.dk> writes:
> I have tried using chunks technique when creating huge string for a stored 
> procedure (C code). I work like charm for small string, but when i create 
> large strings i get a "server closed the connection unexpectedly" :-(

Look for bugs in your code ;-).  I'd bet it's scribbling on memory that
doesn't belong to it.

> And how does one normally handle Large strings in postgres?

The StringInfo functions are moderately convenient in most cases.
        regards, tom lane


Re: Generating Huge String?

From
Steffen Nielsen
Date:
Hi!

I checked out the StringInfo functions, they are basicly the same as the 
Chunks functions I use, but I'll use the others instead even thought I don't 
think they will help me on my problem. But anyway, I've checked out the malloc 
and realloc function, and believe that they won't allow allocation into an 
allready occopied memory area (at least on freebsd).

But if not, maybe I should create a new Chunk (malloc again, and copy; But 
that would probably lead to heavy fragmentation of the memory) if realloc 
can't allocate more continuos memory space?

Sorry if these question seem trivially, I'm a C newbie :-)

/Steffen Nielsen

Quoting Tom Lane <tgl@sss.pgh.pa.us>:

> Steffen Nielsen <styf@cs.auc.dk> writes:
> > I have tried using chunks technique when creating huge string for a stored
> 
> > procedure (C code). I work like charm for small string, but when i create
> 
> > large strings i get a "server closed the connection unexpectedly" :-(
> 
> Look for bugs in your code ;-).  I'd bet it's scribbling on memory that
> doesn't belong to it.
> 
> > And how does one normally handle Large strings in postgres?
> 
> The StringInfo functions are moderately convenient in most cases.
> 
>             regards, tom lane
>