Saltar a contenido

PostgreSQL Server

sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql.service

Entrar a PostgreSQL

sudo -i -u postgres
psql

Salga del símbolo del sistema de PostgreSQL escribiendo:

\q

o también

sudo -u postgres psql
ALTER USER postgres PASSWORD 'NewPassword';
\q

sudo service postgresql restart

Si aun no ha habilitado el puerto 5432, habilitarlo

sudo ufw allow 5432/tcp

Por último, reinicia Postgres para aplicar todos los cambios que hayas realizado en su configuración ejecutando:

sudo systemctl restart postgresql

Nota: Hacer lo mismo en la instancia. Crear regla para permitir el puerto 5432

Permitir el acceso remoto

sudo nano /etc/postgresql/14/main/postgresql.conf

En caso que la versión sea superior, colocar la que corresponda

Busque esta línea en el archivo:

#listen_addresses = 'localhost'

Descomente y cambie el valor a '*', esto permitirá conexiones Postgres de cualquier persona.

listen_addresses = '*'

Guarde y salga del archivo. A continuación, modifíquelo para permitir también las conexiones de todos. Abra el archivo con su editor preferido:pg_hba.conf

sudo nano /etc/postgresql/14/main/pg_hba.conf

Modifique esta sección:

# IPv4 local connections: host    all             all             127.0.0.1/32            md5

A esto:

IPv4 local connections: host      all             all             0.0.0.0/0            md5
sudo systemctl restart postgresql
sudo reboot

Instalacion con Docker

  1. Instalar Docker (si aún no lo tienes)
sudo apt update sudo apt install -y docker.io sudo systemctl enable --now docker

Verifica que Docker está funcionando:

docker --version

2. Descargar e iniciar un contenedor MySQL

Si quieres eliminar el contenedor en caso que exista

sudo docker stop postgres-server
sudo docker rm -f postgres-server 2>/dev/null

Si el contenedor no existe

sudo docker run -d \
  --name postgres-server \
  -e POSTGRES_PASSWORD='MiNiCo57**' \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_DB=academia \
  -p 5432:5432 \
  -v pg_data:/var/lib/postgresql/data \
  -v /mnt/d/academia/bd:/backups \
  postgres:16 \
  -c "listen_addresses=*"

3. Verificar que el contenedor esté corriendo

docker ps

Si el contenedor está corriendo, verás algo como:

Si está en ejecución, verás algo como:

CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES abcdef123456 postgres:latest "docker-entrypoint.s…" Up X minutes 0.0.0.0:5432->5432/tcp postgres-server

4. Conectarse al servidor PosgreSQL dentro del contenedor

Ejecuta el siguiente comando para acceder a la consola:

docker exec -it postgres-server psql -U postgres

5. Crear una base de datos

CREATE DATABASE mi_base_de_datos;
\l  -- Lista todas las bases de datos para verificar que se creó

6. Crear un usuario y darle permisos (opcional)

Si deseas crear un usuario con acceso a la base de datos:

CREATE USER mi_usuario WITH PASSWORD 'mi_contraseña';
GRANT ALL PRIVILEGES ON DATABASE mi_base_de_datos TO mi_usuario;

7. Salir de PostgreSQL

Para salir de la consola de PostgreSQL, usa:

\q

Configuración en conexión con DBeaver

Y Para crear una base de datos:

Instala pgAdmin Remoto

curl -fsSL https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pgadmin.gpg

sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list'

Actualiza las listas de paquetes para sincronizar el repositorio

sudo apt update

Ejecuta el siguiente comando para instalar pgAdmin:

sudo apt install pgadmin4
sudo /usr/pgadmin4/bin/setup-web.sh
sudo systemctl restart postgresql

Ahora podemos conectarnos

http://158.247.124.221/pgadmin4

Para crear una base de datos, acceda a las siguientes opciones:

Botón derecho encima de bases de datos

En caso que algo ande mal:

Uninstall PostgreSQL completamente(Opcional)

sudo systemctl disable postgresql

Removing PostgreSQL Packages

sudo dpkg -l | grep postgresql

Luego remover todos los paquetes

sudo apt-get purge postgresql-14 
sudo apt-get purge postgresql-client-14
sudo apt-get purge postgresql-client-common
sudo apt-get purge postgresql-common 

Removing PostgreSQL Packages

sudo apt-get autoremove

Removing PostgreSQL Configuration Files

sudo rm -rf /etc/postgresql

Removing PostgreSQL Data Directory

sudo rm -rf /var/lib/postgresql

Cleaning Up Remaining Files and Directories

sudo find / -iname "*postgres*" -exec rm -rf {} \;

Verifying Successful Uninstallation

dpkg -l | grep postgresql

Uninstalling PostgreSQL Using Package Manager

sudo apt-get remove --purge postgresql

Copias de Respaldo (Backup)

Existen diferentes opciones:

Backup con PgAdmin 4

Y verificamos el archivo.

Backup con Dbeaver

y Verificamos el archivo.

Desde la terminal de Linux/wsl

Cuando el backup no se genera en el mismo equipo

sudo docker cp almacen_2025_iisem_node_postg.sql postgres-server:/backups/

Luego entrar y verificar archivo:

docker exec -it mysql-server sh

Backup

DB=almacen_2025_iisem_node
OUT="/mnt/d/academia/bd/${DB}_$(date +%F).sql"


sudo docker exec -e PGPASSWORD='MiNiCo57**' postgres-server \
  pg_dump -U postgres -d "$DB" -v > "$OUT"

ls -lh "$OUT"

Si eliminas la base de datos y aparecen error porque tiene sesiones abiertas debes cerrar las sesiones de esta manera:

DB=almacen_2025_iisem_node

# 1) Bloquea conexiones nuevas y cierra las actuales
sudo docker exec -e PGPASSWORD='MiNiCo57**' postgres-server \
  psql -U postgres -d postgres -v ON_ERROR_STOP=1 \
  -c "REVOKE CONNECT ON DATABASE \"$DB\" FROM PUBLIC;" \
  -c "ALTER DATABASE \"$DB\" CONNECTION LIMIT 0;" \
  -c "SELECT pg_terminate_backend(pid)
      FROM pg_stat_activity
      WHERE datname = '$DB' AND pid <> pg_backend_pid();"

Restaurar

DB=almacen_2025_iisem_node
FILE="/mnt/d/academia/bd/${DB}_2025-08-28.sql"

# 1) Cerrar conexiones, dropear y recrear la BD (opcional, pero limpio)
sudo docker exec -e PGPASSWORD='MiNiCo57**' postgres-server \
  psql -U postgres -d postgres -v ON_ERROR_STOP=1 \
  -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${DB}';" \
  -c "DROP DATABASE IF EXISTS \"${DB}\";" \
  -c "CREATE DATABASE \"${DB}\" TEMPLATE template0 ENCODING 'UTF8';"

# 2) Restaurar el .sql (leído desde el host por STDIN)
sudo docker exec -i -e PGPASSWORD='MiNiCo57**' postgres-server \
  psql -U postgres -d "$DB" -v ON_ERROR_STOP=1 -f - < "$FILE"

# 3) Verificar tablas
sudo docker exec -e PGPASSWORD='MiNiCo57**' postgres-server \
  psql -U postgres -d "$DB" -c "\dt"