Esta entrada la dedico a ver cómo instalar PostgreSQL en Ubuntu 18.04 LTS Bionic Beaver paso paso, un sistema de bases de datos bastante utilizado y que puede ser interesante conocer, ya que algunas aplicaciones lo requieren como backend. Al final de esta guía tendrás el servicio instalado y funcionando en tu servidor o VPS Ubuntu, con tu propio usuario administrador.
Antes de instalar PostgreSQL en Ubuntu 18.04 LTS
Para seguir esta guía de instalación de PostgreSQL en Ubuntu 18.04 LTS necesitas cumplir los siguientes requisitos:
- Un sistema Ubuntu 18.04 LTS Bionic Beaver actualizado.
- Conexión a Internet.
- Acceso a línea de comandos con un usuario con privilegios de root o sudo.
También necesitamos algunas herramientas que podemos obtener desde los repositorios de Ubuntu 18.04, por lo que actualizamos la información de los mismos:
~$ sudo apt update
E instalamos los paquetes necesarios:
~$ sudo apt install -y gnupg
Cómo configurar el repositorio de PostgreSQL para Ubuntu 18.04 LTS
Debido a la antigüedad del sistema, vamos a configurar el repositorio oficial de PostgreSQL para Ubuntu 18.04 LTS, ofrecido desde el sitio oficial del proyecto, ya que así podremos disfrutar de las últimas versiones de este servicio de bases de datos, hasta la 14 en el momento de actualizar esta guía, en lugar de la 10 disponible en los repositorios de Ubuntu.
Crearemos un archivo de configuración para el nuevo repositorio:
~$ sudo nano /etc/apt/sources.list.d/postgresql.list
El contenido será la siguiente línea:
deb http://apt.postgresql.org/pub/repos/apt bionic-pgdg main
Ya podemos guardar el archivo.
También debemos instalar la clave pública para verificar las firmas de los paquetes procedentes del repositorio:
~$ wget -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add
Cómo instalar PostgreSQL en Ubuntu 18.04 LTS
Vamos a instalar PostgreSQL en Ubuntu 18.04 LTS usando los paquetes disponibles ya sea en el propio repositorio de Ubuntu o, si lo has instalado, en el repositorio oficial de PostgreSQL. Para ello la primera acción debería ser actualizar las listas de paquetes:
~$ sudo apt update
Si instalamos el paquete postgresql obtendremos la última versión disponible en Ubuntu (la 10.18 en este momento) o la última versión estable del repositorio de PostgreSQL (la 14.x en este momento) si lo hemos configurado:
~$ sudo apt -y install postgresql
En caso de querer una versión concreta del repositorio de PostgreSQL podemos indicarla en el nombre del paquete. Por ejemplo, para PostgreSQL 13:
~$ sudo apt -y install postgresql-13
Están disponibles las versiones 9 (desde la 9.0 a la 9.6), 10, 11, 12, 13 y 14. En este tutorial instalaremos la última versión disponible, la 14.
En cualquier caso se instalan el paquete principal y todas sus dependencias entre las que se encuentran además los clientes y herramientas de consola.
Durante la instalación se crea el servicio postgresql.service o, la versión breve, postgresql.
A diferencia de otras plataformas, en Ubuntu 18.04 durante la instalación queda inicializada la base de datos. Al no requerir una inicialización manual, el instalador deja el servicio activado, por lo que PostgreSQL iniciará con cada arranque de Ubuntu. Además el servicio queda automáticamente iniciado, por lo que ya es posible conectar con el mismo para trabajar.
En cualquier momento puedes comprobar el estado del servicio PostgreSQL en Ubuntu 18.04 con el comando systemctl status postgresql
:
Cómo crear tu propio usuario o rol de PostgreSQL en Ubuntu 18.04 LTS
La instalación de PostgreSQL crea un usuario y grupo postgres en Ubuntu 18.04. Este usuario queda vinculado con el rol postgres de PostgreSQL, así que en principio este es el único usuario con el que se puede trabajar en PostgreSQL.
Nuestra primera acción podría ser crear nuestro propio rol de PostgreSQL para asociar con nuestro usuario de Ubuntu 18.04.
A través de sudo usaremos la herramienta createuser para crear nuestro rol:
~$ sudo -u postgres createuser --interactive Ingrese el nombre del rol a agregar: chacho ¿Será el nuevo rol un superusuario? (s/n) s
Al usar el argumento –interactive la herramienta createuser nos preguntará de forma interactiva el nombre del nuevo rol, si debe ser o no un rol administrativo, etc.
Recuerda que para nuestro objetivo (crear un rol de PostgreSQL asociado a nuestro usuario en Ubuntu) debemos dar el mismo nombre que el usuario al nuevo rol.
Necesitamos una base de datos con el mismo nombre que el nuevo rol, por tanto usaremos de modo parecido el comando createdb, a través de sudo y el usuario postgres:
~$ sudo -u postgres createdb chacho -O chacho
Ya tenemos un rol y una base de datos con el mismo nombre que nuestro usuario de Ubuntu, por lo tanto ya podemos usar directamente (sin sudo) los comandos createuser y createdb. Pero también podemos utilizar directamente el cliente psql:
~$ psql psql (14.0 (Ubuntu 14.0-1.pgdg18.04+1)) Digite «help» para obtener ayuda. chacho=#
En el cliente ya podemos trabajar con sentencias SQL o usar comandos como:
- \d para mostrar relaciones y tablas.
- \h para mostrar ayuda sobre comandos y sentencias SQL.
- \q para salir del cliente.
- etc.
De la misma forma que acabamos de hacer, usando nuestro nuevo rol administrador, podemos crear nuevos roles y bases de datos necesarios para otras aplicaciones que necesiten trabajar sobre PostgreSQL.
Cómo configurar PostgreSQL en Ubuntu 18.04 LTS
Vamos a configurar PostgreSQL en Ubuntu 18.04 LTS mediante algunos casos prácticos que se dan prácticamente en todas las instalaciones.
Activar autenticación por contraseña
Hemos visto que se puede acceder al servicio sin necesidad de contraseña, pero en muchos entornos lo deseable es que exista autenticación. Si ya tenemos un usuario creado podemos crearle una contraseña una vez iniciada sesión con el comando password:
... =# \password Ingrese la nueva contraseña: Ingrésela nuevamente: =#
Y si nuestro usuario es administrador se puede usar el mismo comando para crear contraseñas para otros roles existentes:
... =# \password paco Ingrese la nueva contraseña: Ingrésela nuevamente: =#
Desde línea de comandos podremos crear roles con contraseña utilizando el parámetro -P de createuser:
~$ sudo -u postgres createuser -P juan Ingrese la contraseña para el nuevo rol: Ingrésela nuevamente: ~$
Sin embargo, el hecho de que el usuario tenga una contraseña asignada no significa que se le solicite, como podemos comprobar si hemos creado una contraseña para nuestro rol asociado y volvemos a iniciar sesión:
~$ psql psql (14.0 (Ubuntu 14.0-1.pgdg18.04+1)) Digite «help» para obtener ayuda. chacho=#
Será necesario editar el archivo pg_hba.conf de PostgreSQL para realizar algunos ajustes (modifica la ruta para tu versión de PostgreSQL, si es necesario):
~$ sudo nano /etc/postgresql/14/main/pg_hba.conf
Si has instalado otra versión de PostgreSQL deberás sustituir en la ruta del comando anterior el subdirectorio 14 por tu el que corresponda a tu versión (en el caso de la versión del repositorio de Ubuntu 18.04 sería 10).
Buscamos esta sección:
... # Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer ...
En la segunda directiva local cambiaremos peer por scram-sha-256 o md5 en versiones anteriores (fíjate si en el resto del archivo aparece alguno de los dos métodos para saber cuál usar en caso de duda):
... local all all scram-sha-256 ...
De esta forma seguiremos usando sudo para el rol postgres pero todos los demás requerirán el uso de contraseñas. Si quieres que postgres use contraseña créala primero y después cambia peer por scram-sha-256 o md5 en su directiva local.
Una vez guardados los cambios y cerrado el archivo, habrá que recargar la configuración del servicio:
~$ sudo systemctl reload postgresql
Ahora, al iniciar sesión con nuestro usuario se nos solicitará la contraseña:
~$ psql Contraseña para usuario chacho: psql (14.0 (Ubuntu 14.0-1.pgdg18.04+1)) Digite «help» para obtener ayuda. =#
Acceso remoto a PostgreSQL en Ubuntu 18.04 LTS
Si queremos permitir el acceso remoto a PostgreSQL en Ubuntu 18.04 LTS tendremos que realizar algún ajuste en el archivo postgresql.conf:
~$ sudo nano /etc/postgresql/14/main/postgresql.conf
Buscamos la directiva listen_addresses:
... #listen_addresses = 'localhost' # what IP address(es) to listen on; ...
La directiva está desactivada, por lo que toma el valor por defecto que sólo permite conexiones locales. Eliminaremos el carácter # al inicio de línea y cambiaremos localhost por *:
... listen_addresses = '*' # what IP address(es) to listen on; ...
Guardamos los cambios y cerramos el archivo.
Casi con total seguridad, si permitimos acceso remoto a PostgreSQL querremos que el acceso sea mediante contraseña, por lo que activaremos este tipo de acceso en pg_hba.conf:
~$ sudo nano /etc/postgresql/14/main/pg_hba.conf
Encontraremos un bloque de directivas host como este:
... # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256 ...
Añadiremos a continuación de las líneas anteriores una nueva directiva host (usa md5 en lugar de scram-sha-256 si es el sistema utilizado en tu versión de PostgreSQL):
... # Acceso remoto host all all all scram-sha-256 ...
Guardamos los cambios, cerramos el archivo y reiniciamos el servicio para aplicar todos estos cambios:
~$ sudo systemctl restart postgresql
A partir de este momento PostgreSQL queda a la escucha de conexiones desde red.
Cómo configurar el firewall
Si tienes activado el firewall UFW en Ubuntu 18.04 LTS será necesario añadir una regla para permitir las conexiones entrantes a PostgreSQL:
~$ sudo ufw allow postgresql
Cómo acceder remotamente a PostgreSQL en Ubuntu 18.04 LTS
Para probar el acceso remoto al servicio PostgreSQL de nuestra máquina Ubuntu 18.04 estableceremos conexión desde red con cualquier tipo de cliente, por ejemplo el ya conocido cliente de consola psql., indicando con el parámetro –host la dirección IP o nombre DNS del servidor Ubuntu 18.04 LTS donde está corriendo PostgreSQL, y con el parámetro -U el rol con el que queremos conectar:
~$ psql --host ubuntu64.local.lan -U chacho
Y se establecerá conexión, pudiendo trabajar como si lo hiciésemos localmente.
Conclusión
Ahora que sabes instalar PostgreSQL en Ubuntu 18.04 LTS Bionic Beaver ya puedes poner en funcionamiento este servicio para tus desarrollos o para soportar el backend de las aplicaciones que requieran un backend en este motor de bases de datos.
Si tienes cualquier consulta, sugerencia, notificación, etc. no dudes en dejar un comentario.
¡Apoya comoinstalar.me!
¿Te gusta esta guía de PostgreSQL en Ubuntu 18.04 LTS Bionic Beaver? ¿Quieres acceder a futuros contenidos de este tipo? Si te apetece contribuir con una mínima donación al mantenimiento de este sitio, te estaremos muy agradecidos, y puedes hacerlo dejando 1 $ de propina en PayPal:
O, si te sientes especialmente agradecido, invitándonos a un café:
¡Gracias!
Actualizado a la versión 14.0.
Explicación completa y funciona perfecto, gracias.
¡Me alegro de que te sirva, Christina!
Perfecto. Tremenda explicación. ¡Gracias!
De nada. Me alegro de que te sirviera.
Excelente, funcionó perfecto…..!!!! Gracias
Me alegra saberlo. De nada.