There are several common reasons for the postmaster to fail to start up. Check the postmaster's log file, or start it by hand (without redirecting standard output or standard error) to see what complaint messages appear. Some of the possible error messages are reasonably self-explanatory, but here are some that are not:
FATAL: StreamServerPort: bind() failed: Address already in use
Is another postmaster already running on that port?
This usually means just what it suggests: you accidentally
started a second postmaster on the same port where one is already
running. However, if the kernel error message is not "Address
already in use" or some variant of that wording, there may be a
different problem. For example, trying to start a postmaster on a
reserved port number may draw something like
$ postmaster -i -p 666
FATAL: StreamServerPort: bind() failed: Permission denied
Is another postmaster already running on that port?
IpcMemoryCreate: shmget failed (Invalid argument) key=5440001, size=83918612, permission=600
FATAL 1: ShmemCreate: cannot create region
A message like this probably means that your kernel's limit
on the size of shared memory areas is smaller than the buffer area
that Postgres is trying to create. (Or it could mean that you don't
have SysV-style shared memory support configured into your kernel
at all.) As a temporary workaround, you can try starting the
postmaster with a smaller-than-normal number of buffers (-B
switch). You will eventually want to reconfigure your kernel to
increase the allowed shared memory size, however. You may see this
message when trying to start multiple postmasters on the same
machine, if their total space requests exceed the kernel limit.
IpcSemaphoreCreate: semget failed (No space left on device) key=5440026, num=16, permission=600
A message like this does not mean
that you've run out of disk space; it means that your kernel's
limit on the number of SysV semaphores is smaller than the number
Postgres wants to create. As above, you may be able to work around
the problem by starting the postmaster with a reduced number of
backend processes (-N switch), but you'll eventually want to
increase the kernel limit.