Thread: Problem with memory in C function
Hi folks, Sorry to send this email twice, but I'm having troubles with my email server. I'm having troubles writing a function that reads a file from fisk and return a bytea to database. Can anyone help me? I read the entire file into a (char *) and then return it as a bytea: fseek(file, 0L, SEEK_END); tamanhoArquivo = ftell(file); rewind(file); fileContent = palloc(fileSize + 1); if(fileContent == NULL ) { elog(ERROR, "Error alocating memory (%i bytes)", fileSize + 1); } fread(fileContent, fileSize, 1, file); fclose(file); PG_RETURN_BYTEA_P((bytea *) fileContent); And, when I call the funcion in psql, it gives me the following message: ERROR: Memory exhausted in AllocSetAlloc(879718306) Am I doing something wrong? TIA, -- Diogo Biazus diogo@ikono.com.br http://www.ikono.com.br
Diogo Biazus <diogo@ikono.com.br> writes: > Am I doing something wrong? You forgot to set up the length word that's required for a bytea value (or any other variable-length datatype). The system is taking the first four bytes of the file data as the datum length. regards, tom lane
Tom Lane wrote:
I've done a bytea_import function, that works like lo_import, but you put it into a insert statement:
insert into table_name (field_name) values (bytea_import('/path_to_file_on_server'));
Does anyone think it could be useful in the /contrib?
My Regards,
Thanks, now I've got it working.Diogo Biazus <diogo@ikono.com.br> writes:Am I doing something wrong?You forgot to set up the length word that's required for a bytea value (or any other variable-length datatype). The system is taking the first four bytes of the file data as the datum length.
I've done a bytea_import function, that works like lo_import, but you put it into a insert statement:
insert into table_name (field_name) values (bytea_import('/path_to_file_on_server'));
Does anyone think it could be useful in the /contrib?
My Regards,
-- Diogo Biazus diogo@ikono.com.br http://www.ikono.com.br