PostgreSQL
2. PostgreSQL
2.1 Crear docker-compose.yml
cat > ~/ia-lab/services/motores-bd/postgres/docker-compose.yml << 'EOF'
services:
postgres:
image: postgres:17
container_name: postgres-server
restart: unless-stopped
env_file:
- .env
ports:
- "5432:5432"
volumes:
# Datos persistentes dentro de WSL
- ../../../data/postgres:/var/lib/postgresql/data
# Backups accesibles desde Windows (D:)
- /mnt/d/academia/bd:/backups
command:
- postgres
- -c
- "listen_addresses=*"
networks:
- ia-lab-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
networks:
ia-lab-network:
external: true
EOF
Habilitar UFW y permitir el puerto 5432 (PostgreSQL) en el host:
2.2 Crear .env
cat > ~/ia-lab/services/motores-bd/postgres/.env << 'EOF'
TZ=America/Bogota
POSTGRES_USER=postgres
POSTGRES_PASSWORD=MiNiCo57**
POSTGRES_DB=tecnogua
EOF
Editar la clave del .env en clase:
Cambiar:
2.3 Crear README.md
cat > ~/ia-lab/services/motores-bd/postgres/README.md << 'EOF'
# PostgreSQL 17 - Motor de Base de Datos
> **Acceso remoto habilitado.** Puerto expuesto en `0.0.0.0:5432`.
> **Usuario por defecto:** `postgres`
> **Base de datos inicial:** `tecnogua`
> **Password:** `MiNiCo57**`
---
## Conectar desde WSL (local)
```bash
sudo docker exec -it postgres-server psql -U postgres -d tecnogua
# Password: MiNiCo57**
2.4 Levantar PostgreSQL
Verificar que está corriendo:
2.5 Conectar localmente a PostgreSQL
Ya dentro del motor:
Crear una base de datos
En clase (distinta a tecnogua, que ya crea el contenedor):
Listar todas las bases de datos
Eliminar una base de datos
No puedes eliminar la base a la que estás conectado. Cambia a postgres y luego:
Entrar a una base de datos
En clase:
Listar las tablas
Listar los campos de una tabla
Salir del motor
2.6 Crear un usuario PROPIO con ACCESO REMOTO
Conectate primero como postgres, luego ejecuta.
Parte explicativa. Reemplaza usuario, password y nombre_bd por tus valores:
CREATE DATABASE nombre_bd;
CREATE USER usuario WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE nombre_bd TO usuario;
ALTER DATABASE nombre_bd OWNER TO usuario;
Aplicado en clase. Copiar y pegar (Usuario: admin / Contraseña: 123456):
2.7 Conectar remotamente desde cualquier equipo
** Hacerlo desde DBEAVER **

Reemplaza los valores correspondientes en Host
En el terminal de wsl-ubuntu
Luego, buscar la IP a la linea de Eth0
y esa direccion colocarla en Host
- Host:
IP_SERVIDOR - Port:
5432 - User:
postgres - Password:
MiNiCo57** - Database:
tecnogua
2.8 Backup de una base de datos
sudo docker exec postgres-server pg_dump -U postgres -d tecnogua > /mnt/d/academia/bd/backup_tecnogua_$(date +%Y%m%d).sql
2.9 Variables clave del .env
| Variable | Descripcion |
|---|---|
TZ |
Zona horaria |
POSTGRES_USER |
Usuario administrador (postgres) |
POSTGRES_PASSWORD |
Password del administrador (MiNiCo57**) |
POSTGRES_DB |
Base de datos inicial (tecnogua) |
Nota sobre permisos: El contenedor de PostgreSQL crea los archivos de datos con el usuario interno
postgres(UID 999). Si listas~/ia-lab/data/postgres/y parece vacia o inaccesible, ejecuta:O bien, dale permisos de lectura a tu usuario:
El contenedor seguira funcionando perfectamente.