While attempting to initialize the server as a "postgres" user with:
sudo -u postgres /opt/postgresql-9.3.1/bin/postgres /var/postgres
A segmentation fault occurred. Here's the stack trace from gdb:
#0 0x000000000085b246 in palloc (size=1024) at mcxt.c:647
647 CurrentMemoryContext->isReset = false;
(gdb) bt
#0 0x000000000085b246 in palloc (size=1024) at mcxt.c:647
#1 0x0000000000625750 in initStringInfo (str=0x7fff1c878c10) at stringinfo.c:50
#2 0x0000000000837d5b in expand_fmt_string (fmt=0x9c51b0 "could not change directory to \"%s\": %s", edata=0xc9d680) at elog.c:2886
#3 0x0000000000834e00 in elog_finish (elevel=15, fmt=0x9c51b0 "could not change directory to \"%s\": %s") at elog.c:1288
#4 0x0000000000875796 in resolve_symlinks (path=0x7fff1c87a2e0 "/opt/postgresql-9.3.1/bin/postgres") at exec.c:293
#5 0x000000000087527f in find_my_exec (argv0=0x1989a60 "/opt/postgresql-9.3.1/bin/postgres", retpath=0x7fff1c87a2e0 "/opt/postgresql-9.3.1/bin/postgres") at exec.c:144
#6 0x0000000000875b1c in set_pglocale_pgservice (argv0=0x1989a60 "/opt/postgresql-9.3.1/bin/postgres", app=0x959448 "postgres-9.3") at exec.c:561
#7 0x0000000000636a56 in main (argc=3, argv=0x1989a30) at main.c:
The server was compiled with:
$ CFLAGS=-ggdb PYTHON=/usr/local/bin/python ./configure --enable-debug --prefix=/opt/postgresql-9.3.1 --enable-thread-safety --with-gssapi --with-openssl --with-libxml --with-libxslt --with-python
No errors during make or make install
I confirmed with some debugging that CurrentMemoryContext is NULL when this point in the code is reached. The context should have been initialized before palloc was called by initStringInfo. I don't know where in the workflow it is supposed to be initialized but I seem to have stumbled onto an edge-case where it wasn't initialized and palloc was called.
backend/utils/mmgr/mcxt.c
646
647 CurrentMemoryContext->isReset = false;
648