Esta guía te permitirá ejecutar la base de datos distribuida usando Docker en una sola máquina.
- Nodo Caracas: PostgreSQL en puerto 5432 (IP: 172.20.0.10)
- Nodo Valencia: PostgreSQL en puerto 5433 (IP: 172.20.0.11)
- pgAdmin: Interfaz web en puerto 5050
- Docker Desktop instalado
- Docker Compose instalado
- Puertos 5432, 5433 y 5050 disponibles
git clone [URL_DEL_REPOSITORIO]
cd TEGD_Practica4# Iniciar todos los servicios
docker-compose up -d
# Verificar que los contenedores estén corriendo
docker-compose ps# Ver logs de todos los servicios
docker-compose logs -f
# Ver logs específicos
docker-compose logs -f postgres-caracas
docker-compose logs -f postgres-valencia- Abrir navegador web
- Ir a: http://localhost:5050
- Credenciales:
- Email:
admin@admin.com - Password:
admin
- Email:
- Click derecho en "Servers" → "Register" → "Server"
- General:
- Name:
Caracas
- Name:
- Connection:
- Host:
bd-caracas(o172.20.0.10) - Port:
5432 - Database:
postgres - Username:
postgres - Password:
postgres
- Host:
- Click derecho en "Servers" → "Register" → "Server"
- General:
- Name:
Valencia
- Name:
- Connection:
- Host:
bd-valencia(o172.20.0.11) - Port:
5432 - Database:
postgres - Username:
postgres - Password:
postgres
- Host:
# Conectar al nodo Valencia
docker exec -it bd-valencia psql -U postgres -d clientes_valencia
# Ejecutar consulta distribuida
SELECT * FROM clientes_unificados ORDER BY id;
# Salir
\q# Ejecutar script de verificación
docker exec -it bd-valencia psql -U postgres -f /docker-entrypoint-initdb.d/init.sql- Conectarse al servidor Valencia
- Navegar a: Databases → clientes_valencia
- Click derecho → Query Tool
- Ejecutar:
-- Ver todos los clientes (local + remoto)
SELECT * FROM clientes_unificados
ORDER BY id;
-- Verificar que accede a ambos nodos
EXPLAIN ANALYZE
SELECT * FROM clientes_unificados
WHERE ciudad IN ('Caracas', 'Valencia');# Detener todos los servicios
docker-compose down
# Detener y eliminar volúmenes (BORRA TODOS LOS DATOS)
docker-compose down -v
# Reiniciar un servicio específico
docker-compose restart postgres-valencia
# Ver logs en tiempo real
docker-compose logs -f# Conectar a Caracas
docker exec -it bd-caracas psql -U postgres
# Conectar a Valencia
docker exec -it bd-valencia psql -U postgres
# Ejecutar consulta directa en Valencia
docker exec -it bd-valencia psql -U postgres -d clientes_valencia -c "SELECT * FROM clientes_unificados;"# Desde Valencia, hacer ping a Caracas
docker exec -it bd-valencia ping -c 3 172.20.0.10
# Verificar que Valencia puede conectarse a Caracas
docker exec -it bd-valencia psql -h 172.20.0.10 -U postgres -d clientes_caracas -c "SELECT COUNT(*) FROM clientes;"# Ver logs detallados
docker-compose logs postgres-caracas
docker-compose logs postgres-valencia
# Verificar que los puertos no estén en uso
netstat -ano | findstr "5432"
netstat -ano | findstr "5433"# Verificar la red Docker
docker network inspect tegd_practica4_bd-network
# Reiniciar los servicios
docker-compose restart# Conectar a Valencia y verificar
docker exec -it bd-valencia psql -U postgres -d clientes_valencia
# Verificar extensión
SELECT * FROM pg_extension WHERE extname = 'postgres_fdw';
# Verificar servidor remoto
SELECT * FROM pg_foreign_server;Para demostrar que la consulta accede a ambos nodos a través de la red:
- Ejecutar en pgAdmin (conectado a Valencia):
-- Esta consulta accede a datos locales (Valencia) y remotos (Caracas)
EXPLAIN (ANALYZE, VERBOSE, BUFFERS)
SELECT * FROM clientes_unificados
WHERE ciudad IN ('Caracas', 'Valencia')
ORDER BY id;- El plan de ejecución mostrará:
Append(combina resultados)Seq Scan on clientes(datos locales de Valencia)Foreign Scan on clientes_caracas(datos remotos de Caracas via FDW)
- Docker Desktop mostrando los contenedores corriendo
- pgAdmin con ambos servidores conectados
- Resultado de la consulta
SELECT * FROM clientes_unificados - Plan de ejecución mostrando el Foreign Scan
- Logs de Docker mostrando la comunicación entre nodos
Para eliminar todo y empezar de nuevo:
# Detener y eliminar contenedores, redes y volúmenes
docker-compose down -v
# Verificar que todo se eliminó
docker ps -a
docker volume ls
docker network ls