postmaster

Nombre

postmaster  --  Ejecuta el servidor (backend)multiusuario de Postgres

Synopsis

postmaster [ -B nBuffers ] [ -D 
DataDir ] [ -i ] [ -l ]
postmaster [ -B nBuffers ] [ -D 
DataDir ] [ -N nBackends ] [ -S ]
   [ -d [ DebugLevel ] [ -i ] [ 
-l ] [ -o BackendOptions ] [ -p 
port ]
postmaster [ -n | -s ] ...
  

Inputs

postmaster acepta los siguientes parámetros en su línea de comandos:

-B nBuffers

Indica el número de buffers de memoria compartida que postmasterasignar  y administrará para los procesos del servidor que inice. El valor predeterminado para esta opción es 64 buffers, siendo cada buffer de 8 kilobytes (o lo que sea que esté indicado en BLCKSZ en config.h).

-D DataDir

Especifica el directorio a usar como raíz del arbol de directorios de bases de datos. Si no se especifica -D, el nombre de directorio predeterminado es el valor de la variable de entorno PGDATA. Si PGDATA no está especificada, entonces se utiliza el directorio $POSTGRESHOME/data. Si no se especifica ni la variable de entorno ni esta opció de línea de comando, el directorio predeterminado es el utilizado al momento de la compilación.

-N nBackends

El máximo número de procesos en el servidor (backend) que postmaster tiene permitido iniciar. En la configuración predeterminada este valor está usualmente definido en 32, y puede ser fijado hasta un valor máximo de 1024 si su sistema puede soportar esa cantidad de procesos. Tanto el valor predeterminado como el máximo puede modificarse cuando se compila Postgres (vea el archivo src/include/config.h)

-S

Indica que el proceso de postmaster debe iniciarse en modo silencioso. Esto es, anulará la vinculación con la terminal del usuario (que tiene el control) e iniciará su propio grupo de proceso. Esta opción no debería utilizarse en conjunto con las opciones de depuración ya que cualquier mensaje enviado a la salida estándar y a la salida de error estándar serán descartados.

-d [ DebugLevel ]

Este argumento DebugLevel determina la cantidad de información de depuración que producirá el servidor. Si DebugLevel es uno, postmaster rastreará todo el tráfico de conexión y nada más. Para niveles iguales o mayores a 2 se activa la depuración y el proceso del servidor y postmaster muestran más información, incluyendo el entorno del servidor y tráfico de proceso. Note que si no se especifica ningún archivo para que los servidores del backend envíen su información, esta información será exhibida en la terminal de su proceso postmaster padre.

-i

Esta opción habilita las comunicaciones mediante TCP/IP o mediante el socket de dominio Internet. Sin esta opción solamente es posible la comunicación a través del socket de dominio Unix local.

-l

Este parámetro habilita la comunicación mediante el socket SSL. También es necesario especificar la opción -i. Además, debió habilitarse SSL en el momento de la compilación.

-o BackendOptions

Las opciones de postgres que se especifican en BackendOptions son pasadas a todos los procesos iniciados en el servidor por este postmaster. are passed to all backend server processes started by this postmaster. Si la cadena de opciones contiene espacios, entonces debe encerrársela entre comillas.

-p port

Especifica el puerto TCP/IP o la extensión de archivo del socket del dominio Unix local en el cual postmaster deberá esperar por conexiones solicitadas desde las aplicaciones del lado del cliente. El valor predeterminado es el especificado en la variable de entorno PGPORT o, si PGPORT no fue especificada, se toma como predeterminado el valor establecido cuando Postgres fue compilado (normalmente 5342). Si se especifica un puerto distinto del predeterminado, a todas las aplicaciones cliente (incluyendo psql) deberá especificárseles el mismo puerto ya sea mediante las opciones de línea de comando o utilizando la variable de entorno PGPORT.

Existen algunas opciones de línea de comandos disponibles para realizar depuraciones en caso de que un proceso en el servidor termine de forma anormal. Estas opciones controlan el comportamiento de postmaster en estas situaciones, y ninguna de ellas está pensada para ser utilizada en situaciones normales.

La estrategia usual para esta situación es notigicar a todos los demás procesos en el servidor que deben terminar y reinicializar la memoria y semáforos compartidos. Esto es así debido a que un proceso de servidor que funcione de manera errática podría corromper alguno de estos recursos compartidos antes de terminar.

Estas opciones especiales son:

-n

postmaster no reinicializaráa las estructuras compartidas. Un programador podría luego analizarlas con el programa shmemdoc y examinar la memoria compartida y lo estados de los semáforos.

-s

postmaster detendrá todos los demás procesos del servidor enviándoles la señal SIGSTOP, pero no hará que terminene. Estos permite a los programadores del sistema realizar vuelcos de núcleo a mano para todos los procesos del servidor.

Salidas

semget: No space left on device

Si aparece este mensaje, debería ejecutar el comando ipcclean. Una vez hecho esto, pruebe iniciar postmaster nuevamente. Si aun no funciona, probablemente necesite configurar el núcleo (kernel) de su sistema para que pueda utilizar memoria compartida y semáforos, tal como se describe en las notas de instalación. Si ejecuta múltiples instancias de postmaster en un sólo host, o tiene un kernel con muy poca memoria compartida o un límite de semáforos muy pequeño, tal vez deba reconfigurarlo su kernel para incrementar sus parámetros de memoria comapartida y semáforos.

Sugerencia: Tal vez pueda posponer la reconfiguración del kernel disminuyendo lo especificado con -B para reducir la utilización de memoria compartida por parte de Postgres, o disinuyendo lo especificado con -N para reducir la cantidad de semáforos que utiliza Postgres.

StreamServerPort: cannot bind to port

Si se encuentra con este mensaje, debe asegurarse de que no existen otros procesos de postmaster ejecutándose en el momento. La manera más fácil de determinar esto es mediante el comando

% ps -ax | grep postmaster
	
en sistemas basados en BSD, o
% ps -e | grep postmast
	
en sistemas tipo System V o compatibles con POSIX como ser HP-UX.

Si está seguro de que no existen otros procesos de postmaster en ejecución, y aun así sigue recibiendo este error, intente especificar un puerto diferente utilizando la opción -p. También puede obtener este mensaje de error si finaliza postmaster y lo vuelve a iniciar inmediatamente utilizando el mismo número de puerto; simplemente espere unos segundos hasta que el sistema operativo cierre el puerto antes de intentar nuevamente. Finalmente, puede que obtenga este mensaje de error si especifica un número de puerto que su sistema operativo considere reservado. Por ejemplo, muchas versiones de Unix consideran que los puertos con número menor a 1024 deben ser confiables y solo permite al superusuario tner acceso a ellos.

IpcMemoryAttach: shmat() failed: Permission denied

Una explicación plausible es que otro usuario intentó iniciar un proceso postmaster en el mismo puerto el cual ha adquirido recursos compartidos y luego ha finalizado. Dado que las claves de memoria compartidas de Postgres se basan en el número de puerto asignado al proceso postmaster, estos conflictos tiene más probabilidad de ocurrir si existe más de una instalación en un mismo servidor. Si no hay otros procesos postmaster en ejecución (vea más arriba), ejecute ipcclean e intente nuevamente. Si existen otros postmaster ejecutándose, deberá contactar a los propietarios de estos procesos para coordinar la asignación de puertos y/o la remoción de los segmentos de memoria compartida no utilizados.

Description

postmaster administra la comunicación entre los procesos del cliente y del servidor, así como la asignación de buffers compartidos y semáforos SysV (en máquinas que no tengan intstrucciones del tipo test-and-set). postmaster no interactúa directamente con el usuario y debe ser iniciado como un proceso en segundo plano.

Sólo un postmaster debe estar ejecutándose a la vez para una instalación Postgres dada. Aquí una instalación significa un directorio de base de datos y un número de puerto de postmaster Se puede ejecutar más de un postmaster en una misma máquina si cada uno de ellos tiene un directorio y un número de puerto diferente.

Notes

Siempre que se posible evite utilizar SIGKILL para forzar la finalizació de postmaster. En su lugar debería utilizarse SIGHUP, SIGINT, o SIGTERM (la señal predeterminada para kill(1))". La utilización

% kill -KILL
   
o su forma alternativa
% kill -9
   
impedirá que postmaster pueda liberar los recursos del sistema (memoria compartida y semáforos) que poseía antes de finalizar. En cambio, si postmaster logra liberar los recursos en su poder, le evitará a usted tener que lidiar con los problemas de memoria compartida que se describieron anteriormente.

Existen varias utilidades para resolver problemas de memoria compartida, entre las cuales se encuentran ipcs(1), ipcrm(1), y ipcclean(1).

Utilización

Para iniciar postmaster utilizando los valors predeterminados, escriba:

% nohup postmaster >logfile 2>&1 &
   
Este comando iniciará postmaster en el puerto predeterminado (5432). Esta es la manera más simple, y la más común, de iniciar postmaster.

Para iniciar postmaster con un número de puerto específico y un nombre de ejecutable:

% nohup postmaster -p 1234 &
   
Este comando ejecutará postmaster comunicándose a través del puerto 1234. Para poder conectarse a este postmaster utilizando psql, necesitará ejecutarlo del siguiente modo
% psql -p 1234
   
o fijar la variable de entorno PGPORT:
% setenv PGPORT 1234
% psql