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.