Inicialización del sistema de archivos
Introducción
Una de las etapas más importantes de la instalación de PostgreSQL consiste en crear un directorio en el que escribirá el servidor y leerá los datos de las bases de datos. Esta etapa es un paso previo necesario para el arranque de PostgreSQL.
La elección del directorio que se debe utilizar no es una cuestión menor; todos los datos se almacenarán en él, salvo excepciones. Por lo tanto, es importante seleccionar un directorio situado en un subsistema de disco rápido, si es posible dedicado a esta tarea para optimizar las lecturas y escrituras de datos.
Describir la elección del subsistema de disco excede el marco de este libro; sin embargo, se pueden listar varios tipos de estos subsistemas, como por ejemplo:
-
Controlador RAID con discos SAS o SSD, configurados en RAID 10.
-
Base de almacenamiento SAN con conexiones Fibre Channel.
-
SSD, tarjeta FusionIO o simplemente RAID software.
Se debe tener cuidado con esta elección. La adquisición de hardware específico es frecuente y se debe hacer en función de objetivos concretos: rendimiento esperado, durabilidad, costes, capacidad de alojamiento y administración, etc. Esta lista no es exhaustiva.
Un segundo aspecto importante en este estado es la elección del sistema de archivos utilizado. En función del sistema operativo elegido, se pueden usar diferentes sistemas de archivos y la elección...
Inicialización de una instancia
A cada directorio creado le corresponde una instancia de PostgreSQL, es decir, un servidor que por, lo tanto, tiene su propio espacio de almacenamiento, que acepta conexiones entrantes y dispone de sus propios archivos de configuración.
También se puede llamar a un directorio grupo de bases de datos e incluso clúster. El término anglosajón clúster algunas veces puede llevar a confusión según el contexto en que se use. Se utiliza con frecuencia en el contexto de las bases de datos y significa simplemente grupo. Aquí se emplea en el sentido de grupo de bases de datos.
La instancia y el grupo de bases de datos se corresponden con las mismas bases de datos, pero desde dos puntos de vista diferentes: la instancia se corresponde con una ejecución del servidor PostgreSQL, y un grupo de bases de datos, con un contenedor de bases de datos, en forma de directorios y archivos.
La inicialización de una instancia se realiza con el comando initdb. Situando correctamente las opciones y sus valores, es posible personalizar la instancia. Estas opciones y valores tienen una influencia importante en la manera en la que se comporta el servidor, por ejemplo durante la creación de bases de datos en la instancia, durante la creación de índices o durante la búsqueda de datos. Por lo tanto, es conveniente configurar correctamente esta creación.
1. Opciones del comando
El conjunto de opciones del comando initdb se corresponde con la siguiente lista:
-
-A,--auth=METHOD: método de autenticación por defecto.
-
-D,--pgdata=DATADIR: ruta del directorio de los datos.
-
-X,--xlogdir=XLOGDIR: define la ubicación de las trazas de transacciones.
-
-k,--data-checksums: activa la utilización de las sumas de control de los datos.
-
-E,--encoding=ENCODING: codifica por defecto las bases de datos.
-
--locale=LOCALE: argumento regional por defecto de las bases de datos.
-
--lc-collate, --lc-ctype, --lc-messages, --lc-monetary, --lc-numeric, --lc-time: detalles de los argumentos regionales por defecto. Por defecto se utilizan los ajustes del sistema operativo.
-
--no-locale: utilización del argumento regional C, equivalente a --locale=C.
-
-T, --text-search-config=CFG: configuración por defecto de la búsqueda de texto completo.
-
-U, --username=NAME: superusuario de la instancia.
-
-W, --pwprompt: solicita interactivamente...
Parada y arranque del servidor
Como indica el mensaje del resultado del comando initdb, existe un método sencillo para arrancar el servidor PostgreSQL:
[postgres]$ pg_ctl -D data -l journaltrace start
El comando postgres se corresponde con el programa del servidor. Este es el programa que aceptará las conexiones entrantes una vez cargado. Es posible arrancar el servidor de esta manera, pero este no es el mejor método.
El comando pg_ctl está dedicado al control del servidor PostgreSQL y, por lo tanto, al arranque del servidor postgres. Por consiguiente, es posible arrancar PostgreSQL como se indica; después de detener, volver a arrancar o cargar de nuevo el servidor. La opción -D permite indicar el directorio que contiene los datos y los archivos de configuración. La opción -l permite redirigir los mensajes a un archivo de trazas y la opción start permite indicar la acción que se debe realizar.
Las opciones start, stop, restart y reload permiten respectivamente arrancar, detener, volver a arrancar y volver a cargar el servidor.
El comando pg_ctl se utiliza por el script de arranque del sistema de arranque de los sistemas GNU/Linux para detener y arrancar el servidor PostgreSQL. También permite guardar PostgreSQL como servicio en los sistemas Windows.
Dos opciones permiten guardar y retirar PostgreSQL del panel de servicio de los sistemas Windows. Este registro se realiza implícitamente...
Scripts Debian
Los paquetes fabricados para integrar PostgreSQL en la distribución Debian añadirán algunos scripts que simplifican la administración de las versiones y de los grupos de bases de datos en un sistema.
En los sistemas Debian y Ubuntu, hay disponibles dos paquetes específicos, postgresql-common y postgresql-client-common, que aportan estas funcionalidades.
El paquete postgresql-common ofrece los scripts siguientes:
-
/usr/bin/pg_lsclusters: lista las instancias existentes con su configuración y la ubicación de los datos.
-
/usr/bin/pg_createcluster: crea una instancia; este script utiliza initdb y, como argumento, la instancia en función de la versión solicitada y del resto de las instancias existantes.
-
/usr/bin/pg_ctlcluster: controla las instancias utilizando el comando pg_ctl.
-
/usr/bin/pg_upgradecluster: permite actualizar una instancia de otra versión de PostgreSQL; por ejemplo, de 9.6 a 10.
-
/usr/bin/pg_dropcluster: elimina una instancia de PostgreSQL.
-
/usr/sbin/pg_maintenance: permite realizar algunas tareas de mantenimiento sobre las instancias existentes.
El paquete postgresql-client-common aporta el script pg_wrapper, que permite utilizar un comando cliente específico, en función de la instancia sobre la que el usuario se desea conectar. Por lo tanto, este script permite utilizar siempre la versión correcta de un comando en función de la instancia.
1. El script pg_lsclusters
El siguiente ejemplo muestra el comando pg_lsclusters, que lista las instancias de PostgreSQL que funcionan en un sistema Debian o Ubuntu. Cada línea del resultado del comando se corresponde con una instancia y cada columna indica una propiedad de la instancia:
[root]# pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main
/var/log/postgresql/postgresql-10-main.log
La primera columna indica la versión de PostgreSQL utilizada para la instancia, seguida en la segunda columna por el nombre utilizado para esta instancia.
La tercera columna indica el puerto TCP utilizado por la instancia.
La cuarta columna indica el estado de la instancia: online significa que la instancia está arrancada y down que está parada.
Las siguientes columnas indican respectivamente el usuario propietario de la instancia, el directorio...