8.2 server core dump

From: Marc Evans <Marc(at)SoftwareHackery(dot)Com>
To: pgsql-general(at)postgresql(dot)org
Subject: 8.2 server core dump
Date: 2006-12-14 12:58:45
Message-ID: 20061214074655.F70268@me.softwarehackery.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi -

While working with plperl, I stumbled into a repeatable way to cause the
postgresql server to core dump. The example is shown here (yes, I know
that I didn't code $query properly for the spi_prepare, but that should
not cause a server core dump):

CREATE OR REPLACE FUNCTION insert_date_partition() RETURNS TRIGGER AS $$
my %values = %{$_TD->{new}};
my $table_name = $_TD->{table_name};
my $column_name = $_TD->{args}[0];
my $date = $values{$column_name};
my ($ym,$query);
if (!defined($date)) {
@_ = (gmtime)[5,4,3];
$date = join(' ',$_[0]+1900,$_[1],$_[2]);
$ym = sprintf "%04d%02d",$_[0]+1900,$_[1];
} else {
$query = qq{ SELECT EXTRACT(year FROM '$date'::timestamp) ||
EXTRACT(month FROM '$date'::timestamp) as ym; };
$ym = spi_exec_query($query)->{rows}[0]->{ym};
}
my $partition = $table_name . '_' . $ym;
my $columns = join(',',keys(%values));
my @data = values(%values);
my $qs = '?,' x $#data . '?';
$query = qq{ INSERT INTO $partition ($columns) VALUES ($qs); };
elog(INFO,$query);
my $insert = spi_prepare($query);
return SKIP;
$$ LANGUAGE plperlu;

CREATE TABLE test_table (
id BIGSERIAL,
created_at TIMESTAMP,
count INTEGER
);

CREATE TRIGGER test_table_trigger
BEFORE INSERT ON test_table
FOR EACH ROW EXECUTE PROCEDURE insert_date_partition('created_at');

c3i=# insert into test_table values (1,now(),10);
INFO: INSERT INTO test_table_200612 (created_at,count,id) VALUES (?,?,?);
server closed the connection unexpectedly

The stack trace for the resulting core dump shows:

#0 0x082e09d8 in MemoryContextDelete ()
#1 0x08175c56 in AtEOSubXact_SPI ()
#2 0x080ad740 in DefineSavepoint ()
#3 0x080ada7d in RollbackAndReleaseCurrentSubTransaction ()
#4 0x2a1c94cb in plperl_spi_prepare () from /usr/local/lib/postgresql/plperl.so
#5 0x2a1cd141 in XS__spi_prepare () from /usr/local/lib/postgresql/plperl.so
#6 0x2a24c274 in Perl_pp_entersub () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#7 0x2a245259 in Perl_runops_standard () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#8 0x2a1ef89c in S_call_body () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#9 0x2a1f4326 in Perl_call_sv () from /usr/local/lib/perl5/5.8.8/mach/CORE/libperl.so
#10 0x2a1cbf5a in plperl_call_handler () from /usr/local/lib/postgresql/plperl.so
#11 0x08145df7 in RelationBuildTriggers ()
#12 0x081462b2 in ExecBRInsertTriggers ()
#13 0x0815cc19 in ExecutorRun ()
#14 0x08205cba in FreeQueryDesc ()
#15 0x08206a83 in PortalSetResultFormat ()
#16 0x0820702c in PortalRun ()
#17 0x08202957 in pg_parse_query ()
#18 0x08204ea8 in PostgresMain ()
#19 0x081cb255 in ClosePostmasterPorts ()
#20 0x081ccfd3 in PostmasterMain ()
#21 0x08182a8c in main ()

The OS involved is FreeBSD 6.1-STABLE on a Pentium 4 (e.g. 32 bit).

Note, I attempted to submit this via the bug reporting page at
http://wwwmaster.postgresql.org/system/handleform.php but no matter which
of my several email addresses I attempted to use, the system always
complained "The email address you entered does not appear to be valid."

- Marc

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Markus Schiltknecht 2006-12-14 13:43:28 Re: Large Object to Bytea Conversion
Previous Message Rafal Pietrak 2006-12-14 11:52:23 Re: A VIEW mimicing a TABLE