Dedico esta entrada a una pequeña guía sobre cómo instalar PostgreSQL en FreeBSD 12 paso a paso, ya que son muchos los usuarios del sistema del pequeño demonio que buscan información sobre este motor de bases de datos sobre su servidor o VPS FreeBSD.
Contenido
Antes de instalar PostgreSQL en FreeBSD 12
Para poder seguir esta guía de instalación PostgreSQL en FreeBSD 12 necesitamos unos mínimos requerimientos:
- Un sistema FreeBSD 12 actualizado.
- Acceso a línea de comandos con usuario con permisos de sudo o root.
- Conexión a Internet.
Con estos requisitos resueltos, podemos ponernos manos a la obra e ir abriendo una terminal de consola.
Cómo instalar PostgreSQL en FreeBSD 12
Para instalar PostgreSQL en FreeBSD 12 usaremos una de las versiones que ofrecen los repositorios oficiales, por lo que el primer paso será actualizar la información del gestor de paquetes:
~$ sudo pkg update
Con el sistema actualizado es hora de ver de qué versiones disponemos en los repositorios, así que realizaremos una pequeña búsqueda filtrada:
~$ sudo pkg search ^postgresql |grep -i server postgresql10-server-10.19 PostgreSQL is the most advanced open-source database available anywhere postgresql11-server-11.14 PostgreSQL is the most advanced open-source database available anywhere postgresql12-server-12.9 PostgreSQL is the most advanced open-source database available anywhere postgresql13-server-13.5 PostgreSQL is the most advanced open-source database available anywhere postgresql14-server-14.1 PostgreSQL is the most advanced open-source database available anywhere postgresql96-server-9.6.24 PostgreSQL is the most advanced open-source database available anywhere
De esta búsqueda podemos concluir dos cosas: que tenemos varias versiones para elegir y que parece que alguien está muy convencido de que PostgreSQL es el sistema de bases de datos de código abierto más avanzado…
¿Qué versión de PostgreSQL instalar en FreeBSD 12?
Lo habitual sería instalar la última versión disponible de PostgreSQL en FreeBSD 12, pero si se va a trabajar con PHP, la extensión de PHP para PostgreSQL tiene como dependencia la versión 12 de PostgreSQL Server. Por tanto, en caso de elegir otra versión de PostgreSQL podríamos tener problemas para hacerla funcionar con PHP.
Si vas a trabajar con PostgreSQL y PHP, instala el paquete postgresql12-server:
$ sudo pkg install -y postgresql12-server
En cualquier caso, se descargará e instalará el paquete del servidor PostgreSQL junto a sus dependencias, entre las que figura también el cliente de PostgreSQL.
Datos importantes de la instalación de PostgreSQL
Terminado el proceso hay que tener en cuenta algunos datos sobre esta instalación de PostgreSQL:
- El usuario y el grupo con que se ejecuta PostgreSQL es postgres.
- Antes de actualizar a versiones superiores es necesario crear una copia de seguridad. Si la actualización es a un número de versión menor entonces hay que volcar los datos, actualizar PostgreSQL y cargar los datos.
- Hay que inicializar la base de datos antes de iniciar el servicio
En primer lugar vamos a habilitar el servicio postgresql para que inicie con el sistema y para poder usar los comandos de service que no empiezan por one. Para ello habilitamos el servicio en el archivo /etc/rc.conf mediante el comando service:
~$ sudo service postgresql enable
Hecho esto la siguiente acción no es iniciar el servicio, como cabría esperar, sino inicializar la base de datos, para lo que está previsto el comando especial initdb de service:
~$ sudo service postgresql initdb
Ahora sí podemos iniciar el servicio PostgreSQL como otro cualquiera:
~$ sudo service postgresql start
El servicio inicia con normalidad y nos informa de que queda a la escucha en el puerto 5432 sobre protocolos IPv4 e IPv6 así como a través de sockets de Unix. El resto de los avisos habrá que revisarlos en los logs.
Cómo conectar al servidor PostgreSQL en FreeBSD 12
Dadas las particularidades del esquema de roles o usuarios de PostgreSQL la única cuenta con la que podemos interactuar con el servicio es la del usuario postgres, creada durante la instalación.
Por tanto, podrías empezar a trabajar directamente con el cliente psql usando sudo con la cuenta postgres:
~$ sudo -u postgres psql psql (12.9) Digite «help» para obtener ayuda. postgres=#
Puedes cerrar la sesión con los comandos \q o exit.
Cómo crear tu propio rol de PostgreSQL para tu usuario de FreeBSD 12
Pero seguramente quieras crear un rol de PostgreSQL para tu usuario de FreeBSD 12, que es mucho más cómodo. Para ello usaremos el comando createuser del mismo modo que en el caso anterior:
~$ sudo -u postgres createuser --interactive -P Ingrese el nombre del rol a agregar: chacho Ingrese la contraseña para el nuevo rol: Ingrésela nuevamente: ¿Será el nuevo rol un superusuario? (s/n) s
Con este breve comando interactivo creamos nuestro rol (en mi caso chacho es el nombre de mi usuario en FreeBSD 12), le asignamos una contraseña y decidimos si va a ser usuario administrador o no.
De vuelta a la línea de comandos, necesitamos una base de datos para este nuevo rol, porque al intentar conectar con un rol determinado, el cliente tratará de asociarlo con una base de datos con el mismo nombre que ese rol.
La buena noticia es que al haber creado nuestro propio rol, ya podemos usarlo para utilizar el comando createdb:
~$ createdb chacho -O chacho
Se ha creado la base de datos con el mismo nombre que el nuevo rol y además le hemos concedido los permisos necesarios.
Ya tenemos rol y base de datos propia, por tanto ya podemos usar el cliente interactivo psql con nuestro usuario de FreeBSD 12:
~$ psql psql (12.9) Digite «help» para obtener ayuda. chacho=#
Observa que a pesar de haber creado una contraseña no se ha solicitado para iniciar sesión, debido a que hay que realizar ajustes de configuración para ello.
A partir de ahora ya puedes lanzar comandos SQL para crear tus tablas y comandos propios del cliente psql, pero eso ya es otra historia.
Cómo configurar el acceso con contraseña a PostgreSQL en FreeBSD 12
Para activar el uso de contraseñas de PostgreSQL en FreeBSD 12 será necesario editar el archivo pg_hba.conf:
~$ sudo nano /var/db/postgres/data12/pg_hba.conf
Buscamos la siguiente directiva local:
... local all all trust ...
Vemos que para todos los usuarios se utiliza el método de autenticación trust, que consiste en identificar el usuario de FreeBSD 12 con un rol con el mismo nombre en PostgreSQL, por lo que la autenticación queda reservada a FreeBSD 12. Es decir, como nuestro usuario ya se ha autenticado en FreeBSD 12, para trabajar con el rol con el mismo nombre no necesita indicar la contraseña de PostgreSQL.
Para que PostgreSQL solicite contraseñas de usuario deberíamos cambiar el método trust por md5:
... local all all md5 ...
Esto obligaría a usar contraseña para el rol postgres, pero lo normal es mantenerlo con la autenticación trust. Para ello bastaría con insertar una directiva local antes de la que configura el resto de usuarios:
... local all postgres trust local all all md5 ...
Por último, muchas aplicaciones locales conectan a PostgreSQL en modo TCP/IP, pero la autenticación falla debido a estas dos directivas host:
... # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust ...
Es importante cambiar trust por md5 en estas dos directivas:
... # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 ...
Ahora podemos guardar los cambios y reiniciar el servicio:
~$ sudo service postgresql restart
Desde este momento, se solicitará autenticación de los usuarios de PostgreSQL, como por ejemplo cuando conectamos con el cliente psql:
~$ psql Contraseña para usuario chacho: psql (12.9) Digite «help» para obtener ayuda. chacho=#
Acceso remoto a PostgreSQL en FreeBSD 12
PostgreSQL por defecto no permite acceso remoto al servicio en nuestro sistema FreeBSD 12. Si queremos cambiar este comportamiento y permitir conexiones en red debemos editar el archivo de configuración postgresql.conf:
$ sudo nano /var/db/postgres/data12/postgresql.conf
Buscaremos la directiva listen_addresses:
... #listen_addresses = 'localhost' # what IP address(es) to listen on; ...
Observamos que está desactivada, así que la activaremos eliminando el carácter # inicial y cambiaremos su valor para permitir conexiones remotas:
... listen_addresses = '*' ...
No basta con hacer que el servicio esté disponible a través de los distintos adaptadores de red, sino que además hay que permitir que los roles conecten remotamente. Para esto editaremos el archivo pg_hba.conf:
$ sudo nano /var/db/postgres/data12/pg_hba.conf
Añadiremos al final del archivo una nueva línea con una directiva host de este estilo:
... host all all all md5 ...
Esto significa que se permite el acceso desde la red a todas las bases de datos con todos los roles usando contraseña.
Guardaremos los cambios de este archivo y reiniciaremos el servicio para que cargue las nuevas configuraciones:
$ sudo service postgresql restart
Cómo probar el acceso remoto desde otra máquina en red
Ahora ya podemos acceder remotamente al servicio PostgreSQL de nuestro sistema FreeBSD 12 desde otra máquina con un cliente como psql, indicando la dirección o dominio del servidor:
~$ psql -h freebsd12.local.lan -U chacho
En este ejemplo estamos conectando desde un máquina que tiene una versión de PostgreSQL más reciente que la elegida para el servidor FreeBSD 12, pero la conexión es posible y no habrá problema alguno para trabajar de forma remota.
Conclusión
Ahora que sabes cómo instalar PostgreSQL en FreeBSD 12 ya estás en condiciones de crear usuarios y bases de datos para las aplicaciones que se basan en este servicio de código abierto. Habrás visto que empezar a trabajar puede parecer un poco más extraño que en otros sistemas de bases de datos, pero sólo ocurre al principio.
Si tienes cualquier duda o pregunta, sugerencia, notificación de errores, etc. sobre esta entrada, puedes dejarme un comentario.
¡Apoya este sitio!
Si estabas perdido con el reto de instalar PostgreSQL en FreeBSD 12, quizás no puedas evitar caer en la tentación de agradecérnoslo. Toda contribución por mínima que sea ayuda a mantener este sitio en línea y a crear nuevas guías.
Puedes ayudarnos dejando una propina de 1 $ desde PayPal:
O, si te sientes especialmente generoso, puedes invitarnos a un café:
¡Gracias!