Thread: simple function crashes my postmaster

simple function crashes my postmaster

From
Meggus
Date:
Hi,

there is a mystic problem with a simple C function which creates a table. 
I minimized the code to reproduce the error. It crashes on two different 
Linux systems (SuSE) and with pg 7.0/7.1. I found that the crash occurrs 
as soon as I use a SERIAL type in the table creation command.

Please help,

thank you,

Markus

Here is the C function:

bool crash ()
{if (SPI_connect () < 0) return (false);
SPI_exec ("CREATE TABLE atl (idx SERIAL)",0);
SPI_finish ();
return (true);
}

Here is the SQL code:

CREATE FUNCTION    crash() RETURNS BOOL AS '/usr/lib/mycode.so' LANGUAGE 'C';
SELECT crash();

And this is the backend's log:

{ QUERY   :command 5    :create atl      { CREATE      :relname atl      :istemp false          :columns (        {
COLUMNDEF        :colname idx         :typename            { TYPENAME            :name int4            :timezone false
         :setof false typmod -1            :arrayBounds <>           }                 :is_not_null true
:is_sequencetrue         :raw_default            {FUNCTION nextval            :args (              {CONST
"\"atl_idx_seq""               :typename <>              }           )                       :agg_star false
:agg_distinctfalse            }                 :cooked_default <>         :constraints (           { atl_idx_seq
    :type DEFAULT            :raw               {FUNCTION nextval               :args (                 {CONST
"\"atl_idx_seq""                  :typename <>                 }              )                             :agg_star
false              :agg_distinct false               }                       :cooked <>           }
{atl_idx_key            :type UNIQUE (              { IDENT idx              }           )           }
 { <>            :type NOT NULL           }        )        }     )           :inhRelnames <>      :constraints <>
}    :resultRelation 0   :into <>   :isPortal false   :isBinary false   :isTemp false   :unionall false
:distinctClause<>   :sortClause <>   :rtable <>   :targetlist <>   :qual <>   :groupClause <>   :havingQual <>
:hasAggsfalse   :hasSubLinks false   :unionClause <>   :intersectClause <>   :limitOffset <>   :limitCount <>
:rowMark<>  }
 

{ QUERY   :command 5    :index atl_idx_key on atl      { INDEX      :idxname atl_idx_key      :relname atl
:accessMethodbtree      :indexParams (        { INDEXELEM         :name idx         :args <>         :class <>
:typename<>        }     )           :withClause <>      :whereClause <>      :rangetable <>      :lossy false
:uniquetrue      }     :resultRelation 0   :into <>   :isPortal false   :isBinary false   :isTemp false   :unionall
false  :distinctClause <>   :sortClause <>   :rtable <>   :targetlist <>   :qual <>   :groupClause <>   :havingQual <>
:hasAggs false   :hasSubLinks false   :unionClause <>   :intersectClause <>   :limitOffset <>   :limitCount <>
:rowMark<>  }
 
010626.17:02:16.391 [21378] ERROR:  RelationClearRelation: relation 38354 
deleted while still in use

010626.17:02:16.391 [21378] AbortCurrentTransaction
010626.17:02:16.392 [21378] NOTICE:  mdopen: couldn't open ØÈÞ"ÿÿÿÿ: No 
such file or directory
010626.17:02:16.392 [21378] ERROR:  cannot open relation ØÈÞ"ÿÿÿÿ
010626.17:02:16.393 [21378] FATAL 2:  elog: error during error recovery, 
giving up!
010626.17:02:16.393 [21378] proc_exit(2)
010626.17:02:16.393 [21378] shmem_exit(2)
010626.17:02:16.393 [21378] exit(2)
/usr/bin/postmaster: reaping dead processes...
/usr/bin/postmaster: CleanupProc: pid 21378 exited with status 512
Server process (pid 21378) exited with status 512 at Tue Jun 26 17:02:16 
2001
Terminating any active server processes...
Server processes were terminated at Tue Jun 26 17:02:16 2001
Reinitializing shared memory and semaphores
010626.17:02:16.397 [21346] shmem_exit(0)
binding ShmemCreate(key=52e325, size=1104896)
010626.17:02:16.398 [21379] DEBUG:  Data Base System is starting up at Tue 
Jun 26 17:02:16 2001
010626.17:02:16.398 [21379] DEBUG:  Data Base System was interrupted being 
in production at Tue Jun 26 17:02:12 2001
010626.17:02:16.399 [21379] DEBUG:  Data Base System is in production 
state at Tue Jun 26 17:02:16 2001
010626.17:02:16.399 [21379] proc_exit(0)
010626.17:02:16.399 [21379] shmem_exit(0)
010626.17:02:16.399 [21379] exit(0)
/usr/bin/postmaster: reaping dead processes...
010626.17:02:19.997 [21346] pmdie 2
Fast Shutdown request at Tue Jun 26 17:02:19 2001
010626.17:02:19.998 [21380] DEBUG:  Data Base System shutting down at Tue 
Jun 26 17:02:19 2001
010626.17:02:19.999 [21380] DEBUG:  Data Base System shut down at Tue Jun 
26 17:02:19 2001
010626.17:02:19.999 [21380] proc_exit(0)
010626.17:02:19.999 [21380] shmem_exit(0)
010626.17:02:19.999 [21380] exit(0)
/usr/bin/postmaster: reaping dead processes...
010626.17:02:19.999 [21346] proc_exit(0)
010626.17:02:19.999 [21346] shmem_exit(0)
010626.17:02:20.007 [21346] exit(0)


Re: simple function crashes my postmaster

From
Tom Lane
Date:
Meggus <meggus@gmx.net> writes:
> there is a mystic problem with a simple C function which creates a table. 
> I minimized the code to reproduce the error. It crashes on two different 
> Linux systems (SuSE) and with pg 7.0/7.1. I found that the crash occurrs 
> as soon as I use a SERIAL type in the table creation command.

I can't duplicate the problem in 7.1.2 (nor current sources).  Please
update.  If you still see the problem with 7.1.2, try setting a
breakpoint at elog() to obtain a stack trace from the point of the
first error message.
        regards, tom lane