PostgreSQL 31 de agosto, 2023 • 10 min de lectura

Instalar PostgreSQL 10 en Rocky Linux en directorio personalizado

Guía completa para instalar PostgreSQL 10 en Rocky Linux 8.8 configurando un directorio de datos personalizado en lugar del directorio por defecto.

Paso 1: Verificar versiones disponibles

Para instalar PostgreSQL 10 en Rocky Linux 8.8, primero verificamos las versiones disponibles:

[root@pruebas ~]# dnf module list postgresql
Rocky Linux 8 - AppStream
Name                Stream              Profiles                Summary                                                      
postgresql          9.6                 client, server [d]      PostgreSQL server and client module                          
postgresql          10 [d]              client, server [d]      PostgreSQL server and client module                          
postgresql          12                  client, server [d]      PostgreSQL server and client module                          
postgresql          13                  client, server [d]      PostgreSQL server and client module                          
postgresql          15                  client, server [d]      PostgreSQL server and client module                          

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Vemos que la versión 10 se va a instalar por defecto, indicado por los caracteres [d].

⚠️ Nota importante:

La versión 10 de PostgreSQL ya no es soportada oficialmente. Esta instalación se realizó debido a requerimientos puntuales de compatibilidad.

Paso 2: Instalar PostgreSQL

Ejecutamos el procedimiento de instalación:

[root@pruebas ~]# dnf install postgresql-server
Last metadata expiration check: 0:00:18 ago on Thu 31 Aug 2023 03:10:36 PM -05.
Dependencies resolved.
===================================================================================================================
 Package                    Architecture    Version                                      Repository          Size
===================================================================================================================
Installing:
 postgresql-server          x86_64          10.23-2.module+el8.8.0+1440+992378a9        appstream          5.0 M
Installing dependencies:
 libpq                      x86_64          13.5-1.el8                                   appstream          197 k
 postgresql                 x86_64          10.23-2.module+el8.8.0+1440+992378a9        appstream          1.5 M

Transaction Summary
===================================================================================================================
Install  3 Packages

Total download size: 6.7 M
Installed size: 26 M
Is this ok [y/N]: y
...
Complete!

Paso 3: Configurar directorio personalizado

Normalmente PostgreSQL usa /var/lib/pgsql/data. Vamos a configurarlo para usar /var/lib/pgsql/10/data.

3.1 Editar configuración de systemd

Ejecuta el siguiente comando para crear un archivo de configuración personalizado:

[root@pruebas system]# systemctl edit postgresql.service

Dentro del archivo, agrega las siguientes líneas:

[Service]
Environment=PGDATA=/var/lib/pgsql/10/data

3.2 Verificar el archivo creado

[root@pruebas system]# cat /etc/systemd/system/postgresql.service.d/override.conf 
[Service]
Environment=PGDATA=/var/lib/pgsql/10/data

3.3 Recargar systemd

[root@pruebas system]# systemctl daemon-reload

Paso 4: Crear y configurar el directorio

4.1 Crear la ruta

[root@pruebas system]# mkdir -p /var/lib/pgsql/10/data

4.2 Cambiar propietario

[root@pruebas system]# chown -R postgres:postgres /var/lib/pgsql

⚠️ Error común:

Si no realizas los pasos previos (creación de ruta y cambio de propiedad), obtendrás este error:

mkdir: cannot create directory '/var/lib/pgsql/10/data': No such file or directory
ERROR: Initializing database failed

Paso 5: Inicializar la base de datos

[root@pruebas system]# postgresql-setup --initdb
 * Initializing database in '/var/lib/pgsql/10/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Verificar contenido del directorio

[root@pruebas system]# ls -ltr /var/lib/pgsql/10/data/
total 48
drwx------ 2 postgres postgres     6 Aug 31 16:06 pg_twophase
drwx------ 2 postgres postgres     6 Aug 31 16:06 pg_snapshots
drwx------ 2 postgres postgres     6 Aug 31 16:06 pg_serial
drwx------ 4 postgres postgres    36 Aug 31 16:06 pg_multixact
-rw------- 1 postgres postgres     3 Aug 31 16:06 PG_VERSION
-rw------- 1 postgres postgres 23003 Aug 31 16:06 postgresql.conf
-rw------- 1 postgres postgres  4269 Aug 31 16:06 pg_hba.conf
drwx------ 2 postgres postgres  4096 Aug 31 16:06 global
drwx------ 5 postgres postgres    41 Aug 31 16:06 base
...

Paso 6: Iniciar el servicio

[root@pruebas system]# systemctl start postgresql.service

Verificar el estado

[root@pruebas system]# systemctl status postgresql.service 
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/postgresql.service.d
           └─override.conf
   Active: active (running) since Thu 2023-08-31 16:08:04 -05; 2s ago
 Main PID: 37367 (postmaster)
    Tasks: 8 (limit: 24847)
   Memory: 16.0M
   CGroup: /system.slice/postgresql.service
           ├─37367 /usr/bin/postmaster -D /var/lib/pgsql/10/data
           ├─37369 postgres: logger process   
           ├─37371 postgres: checkpointer process   
           ├─37372 postgres: writer process   
           ├─37373 postgres: wal writer process   
           ├─37374 postgres: autovacuum launcher process   
           ├─37375 postgres: stats collector process   
           └─37376 postgres: bgworker: logical replication launcher

Conclusión

Hemos configurado exitosamente PostgreSQL en un directorio personalizado. Esto es útil cuando necesitas:

  • Separar datos en diferentes particiones o discos
  • Mantener múltiples versiones de PostgreSQL
  • Cumplir con políticas de organización de directorios
  • Facilitar backups y migraciones

💡 Tip:

Para habilitar el inicio automático del servicio, ejecuta: systemctl enable postgresql.service