From: | Jessica Ditt <jessica(dot)ditt(at)web(dot)de> |
---|---|
To: | PostgreSQL Novice <pgsql-novice(at)postgresql(dot)org> |
Subject: | another question concerning TOAST |
Date: | 2005-05-31 09:16:19 |
Message-ID: | 1117530979.4753.32.camel@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
Hi,
after having created my own variable length data type I did not
encounter problems... until now:
I have two structures:
typedef struct statistics {
float8 avg; /* average value of timeseries */
float8 min; /* min value */
float8 max; /* max value */
double sum; /* all values of timeseries added */
} STATISTICS;
typedef struct timeseries {
int32 size; /* size of struct */
int4 nflts; /* dimension of values[] */
int4 deltat; /* delta t of values in sec */
STATISTICS stats; /* some statistical information */
float8 values[1]; /* array */
} TIMESERIES;
My declaration in postgres:
CREATE TYPE timeseries(
INPUT=timeseries_in,
OUTPUT=timeseries_out,
INTERNALLENGTH=VARIABLE,
STORAGE=EXTENDED
);
All of this was working pretty fine, until I now seem to try to create a
timeseries which is too big.
My database:
CREATE TABLE zeitreihe(
zeit timestamp with time zone,
reihe timeseries
);
At the moment I store timeseries containing values for one day, that
means the dimension of the values-array is 92, 96 or 100.
I now try to select multiple rows and create another longer timeseries.
Trying to do so, I sometimes lose the server connection:
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!>
When I append just a small number of daily timeseries, my function is
able to return the pointer normally.
But when the dimension of the array reaches 10.000, I lose the
connection.
I'm not able to debug postgres with gdb / ddd because I'm a novice
(although I'd love to), but the debugging information I log tells me,
that there's a segmentation fault which kills the process.
...
INFO: repalloc(ts_res) war erfolgreich //repalloc was successful and
did not return a NULL pointer
NOTICE: ### TS_RES #53 nflts: 5184 - size: 20780
NOTICE: nach der for-Schleife // that indicates my very end of
the function, the next statement is PG_RETURN_TIMESERIES_P(ts_res)
DEBUG: reaping dead processes
DEBUG: child process (PID 6543) was terminated by signal 11
LOG: server process (PID 6543) was terminated by signal 11
LOG: terminating any other active server processes
LOG: all server processes terminated; reinitializing
DEBUG: shmem_exit(0)
DEBUG: invoking IpcMemoryCreate(size=10436608)
LOG: database system was interrupted at 2005-05-30 19:45:05 CEST
LOG: checkpoint record is at 0/A8CE7B0
LOG: redo record is at 0/A8CE7B0; undo record is at 0/0; shutdown TRUE
LOG: next transaction ID: 73597; next OID: 1470196
LOG: database system was not properly shut down; automatic recovery in
progress
FATAL: the database system is starting up
...
The window I execute the pg_ctl statement shows:
*** glibc detected *** free(): invalid next size (normal): 0x09b94680
***
I don't know, where I made a mistake. I haven't been thinking of
toasting / detoasting yet, although I now think, I have to.
When I got the literature I read right, I don't have to care about
toasting, but about detoasting, right?
I wrote my own PG_GETARG and PG_RETURN macros, may I also write my own
TIMESERIES_DETOAST macro? Will it work?
Do you think, that this will help me at all?
Any reply will be helpful to me!!!
Thank you very much in advance!
Jessica
PS: Postgres-Version: 7.4.5, OS: Fedora Core 3 (kernel 2.6.11-1.14)
From | Date | Subject | |
---|---|---|---|
Next Message | Vincent CARON | 2005-05-31 10:42:40 | trigger with arguments |
Previous Message | Abraham | 2005-05-30 21:35:39 | Little Stox Sizzle Sometimes |