Hi,

I noticed that the postgresql init script was unable restart postgres, 
telling me that postmaster died or that the service is not running.

The problem is in the pgstatus function and the output from pg_ctl which 
seems to be locale dependent. This prevent the init script from finding 
de postmaster PID correctly.

My system uses the fr_FR locale, and the output from pg_ctl contains an 
extra space before the colon character:

   /^pg_ctl :.*PID : \([0-9]\+\).*/

instead of:

   /^pg_ctl:.*PID: \([0-9]\+\).*/

I fixed it by forcing LANG=C when calling pg_ctl:

--- /etc/rc.d/init.d/postgresql.orig    2006-10-30 15:44:17.000000000 +0100
+++ /etc/rc.d/init.d/postgresql 2006-10-30 15:44:35.000000000 +0100
@@ -71,7 +71,7 @@
  pgstatus() {
        PG_STATUS="unknown"
        PG_PID="unknown"
-       output=`TMPDIR=/tmp su postgres -c "/usr/bin/pg_ctl -D $1 status"`
+       output=`LANG=C TMPDIR=/tmp su postgres -c "/usr/bin/pg_ctl -D $1 
status"`
        status=`echo $?`

        if [ $status -eq 1 ]; then

That way, the output from pg_ctl should be the same, whatever the system 
locale is.

Regards,
Jérôme Augé
_______________________________________________
pld-devel-en mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-en

Reply via email to