Thread: pg_ctl problem (was Re: BeOS Patch)
Cyril VELTER <cyril.velter@libertysurf.fr> writes: > pg_ctl output when no shm segments left > pg_ctl: It seems another postmaster is running. Trying to start postmaster > anyway. > pg_ctl: cannot start postmaster <-------- not true !!! > Examine the log output. > DEBUG: database system was interrupted at 2001-03-18 12:01:57 CET > DEBUG: CheckPoint record at (0, 20204684) > DEBUG: Redo record at (0, 20204684); Undo record at (0, 0); Shutdown TRUE > DEBUG: NextTransactionId: 5384; NextOid: 153313 > DEBUG: database system was not properly shut down; automatic recovery in > progress... > DEBUG: ReadRecord: record with zero len at (0, 20204748) > DEBUG: redo is not required > DEBUG: database system is in production state Looking at the pg_ctl script, it seems this must be coming from eval '$po_path' '$POSTOPTS' $logopt '&' if [ -f $PIDFILE ];thenif [ "`sed -n 1p $PIDFILE`" = "$pid" ];then echo "$CMDNAME: cannot start postmaster" 1>&2 echo "Examine the log output." 1>&2 exit 1 fi fi which is clearly not giving the postmaster enough time to remove or rewrite the pidfile. Shouldn't we put a "sleep 1" in there before the "if"? regards, tom lane
At a minimum, you should do a test, and if it does not yet exist, do a sleep, then the test again. > Cyril VELTER <cyril.velter@libertysurf.fr> writes: > > pg_ctl output when no shm segments left > > > pg_ctl: It seems another postmaster is running. Trying to start postmaster > > anyway. > > pg_ctl: cannot start postmaster <-------- not true !!! > > Examine the log output. > > DEBUG: database system was interrupted at 2001-03-18 12:01:57 CET > > DEBUG: CheckPoint record at (0, 20204684) > > DEBUG: Redo record at (0, 20204684); Undo record at (0, 0); Shutdown TRUE > > DEBUG: NextTransactionId: 5384; NextOid: 153313 > > DEBUG: database system was not properly shut down; automatic recovery in > > progress... > > DEBUG: ReadRecord: record with zero len at (0, 20204748) > > DEBUG: redo is not required > > DEBUG: database system is in production state > > Looking at the pg_ctl script, it seems this must be coming from > > eval '$po_path' '$POSTOPTS' $logopt '&' > > if [ -f $PIDFILE ];then > if [ "`sed -n 1p $PIDFILE`" = "$pid" ];then > echo "$CMDNAME: cannot start postmaster" 1>&2 > echo "Examine the log output." 1>&2 > exit 1 > fi > fi > > which is clearly not giving the postmaster enough time to remove or > rewrite the pidfile. Shouldn't we put a "sleep 1" in there before > the "if"? > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
Tom Lane writes: > eval '$po_path' '$POSTOPTS' $logopt '&' > > if [ -f $PIDFILE ];then > if [ "`sed -n 1p $PIDFILE`" = "$pid" ];then > echo "$CMDNAME: cannot start postmaster" 1>&2 > echo "Examine the log output." 1>&2 > exit 1 > fi > fi > > which is clearly not giving the postmaster enough time to remove or > rewrite the pidfile. Shouldn't we put a "sleep 1" in there before > the "if"? This is probably the best we can do. -- Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Peter Eisentraut <peter_e@gmx.net> writes: >> which is clearly not giving the postmaster enough time to remove or >> rewrite the pidfile. Shouldn't we put a "sleep 1" in there before >> the "if"? > This is probably the best we can do. Actually, the whole thing should only happen if we found a pre-existing PIDFILE anyway. Will fix. regards, tom lane