Connecting pgAdmin and Postgres
El proceso de conexión entre pgAdmin y PostgreSQL implica configurar adecuadamente los parámetros de conexión en pgAdmin, como el nombre del servidor, el puerto y las credenciales de acceso. Una vez establecida la conexión, pgAdmin permite gestionar bases de datos, ejecutar consultas SQL, administrar roles de usuario y supervisar el rendimiento del servidor PostgreSQL de manera intuitiva a través de una interfaz gráfica amigable, facilitando así la administración y el análisis de datos almacenados en PostgreSQL.
Además de lo anterior, esta configuración te permitirá poner en práctica o aprender desde cero SQL de manera efectiva. SQL (Structured Query Language) es el lenguaje estándar utilizado para gestionar y manipular bases de datos relacionales como PostgreSQL. Con pgAdmin conectado a tu instancia de PostgreSQL, podrás explorar y ejecutar consultas SQL directamente desde una interfaz gráfica e intuitiva. Esto es especialmente útil tanto para principiantes que desean aprender los fundamentos del SQL como para profesionales que necesitan realizar consultas complejas o administrar bases de datos de manera eficiente. Además, pgAdmin ofrece herramientas visuales que facilitan la creación y modificación de tablas, vistas y procedimientos almacenados, brindando así una plataforma integral para el desarrollo y la gestión de bases de datos PostgreSQL.
Docker + PostgreSQL
En la sección anterior Ingesting NY Taxi Data to Postgres
vimos como levantar un contenedor Postgres con el siguiente comando:
docker run -it \
-e POSTGRES_USER="root" \
-e POSTGRES_PASSWORD="root" \
-e POSTGRES_DB="ny_taxi" \
-v $(pwd)/nyc-tlc-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:13
Ahora vamos a levantar otro contenedor en este caso PgAdmin con el siguiente comando docker desde la terminal de VSCode:
docker run -it \
-e PGADMIN_DEFAULT_EMAIL="admin@admin.com" \
-e PGADMIN_DEFAULT_PASSWORD="root" \
-p 8080:80 \
dpage/pgadmin4
test PGcli
SELECT count(1) FROM yellow_taxi_data;
select MAX(tpep_pickup_datetime), MIN(tpep_pickup_datetime), MAX(total_amount)
from yellow_taxi_data
Esta consulta SQL realiza tres cálculos sobre la tabla yellow_taxi_data
:
- MAX(tpep_pickup_datetime): Encuentra la fecha y hora más reciente en la que se registró un viaje.
- MIN(tpep_pickup_datetime): Encuentra la fecha y hora más antigua en la que se registró un viaje.
- MAX(total_amount): Encuentra el valor máximo del total pagado por un viaje.
Así, la consulta selecciona la fecha y hora del viaje más reciente, la fecha y hora del viaje más antiguo, y el monto total más alto pagado por un viaje en la tabla yellow_taxi_data
.
Docker Network
Sin embargo, es importante conectar ambos contenedores Docker que ejecutan PostgreSQL y pgAdmin en la misma red porque les permite comunicarse fácilmente entre sí. Esto significa que pgAdmin puede acceder a la base de datos PostgreSQL de manera segura usando nombres simples en lugar de números complicados de IP. Así se simplifica la configuración y se mantiene la seguridad al limitar quién puede acceder a los servicios, todo dentro del entorno controlado de Docker.
Para conectar los dos contenedores Docker (postgres
y pgadmin4
) en una red Docker a la que llamaremos pg-network
, seguiendo estos pasos:
Paso 1: Crear la red Docker
Primero, crea la red Docker llamada pg-network
. Puedes hacerlo con el siguiente comando:
docker network create pg-network
Paso 2: Ejecutar el contenedor PostgreSQL en la red Docker
docker run -it \
--name postgres-container \
--network pg-network \
-e POSTGRES_USER="root" \
-e POSTGRES_PASSWORD="root" \
-e POSTGRES_DB="ny_taxi" \
-v $(pwd)/nyc-tlc-data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:13
Explicación:
--name postgres-container
: Asigna un nombre al contenedor para facilitar su referencia.--network pg-network
: Conecta el contenedor a la red Dockerpg-network
.-e POSTGRES_USER="root"
,-e POSTGRES_PASSWORD="root"
,-e POSTGRES_DB="ny_taxi"
: Establece las variables de entorno para configurar la base de datos PostgreSQL dentro del contenedor.-v $(pwd)/nyc-tlc-data:/var/lib/postgresql/data
: Monta un volumen para persistir los datos de la base de datos PostgreSQL fuera del contenedor.-p 5432:5432
: Mapea el puerto 5432 del contenedor al puerto 5432 del host (para acceder a la base de datos desde fuera del contenedor).
Paso 3: Ejecutar el contenedor pgAdmin en la red Docker
docker run -it \
--name pgadmin-container \
--network pg-network \
-e PGADMIN_DEFAULT_EMAIL="admin@admin.com" \
-e PGADMIN_DEFAULT_PASSWORD="root" \
-p 8080:80 \
dpage/pgadmin4
Explicaci ón:
--name pgadmin-container
: Asigna un nombre al contenedor para facilitar su referencia.--network pg-network
: Conecta el contenedor a la red Dockerpg-network
.-e PGADMIN_DEFAULT_EMAIL="admin@admin.com"
,-e PGADMIN_DEFAULT_PASSWORD="root"
: Configura las credenciales de administrador para pgAdmin.-p 8080:80
: Mapea el puerto 8080 del host al puerto 80 del contenedor (para acceder a pgAdmin desde fuera del contenedor).
Paso 4: Verificar la conexión
Una vez que ambos contenedores estén en ejecución en la misma red Docker (pg-network
), deberían poder comunicarse entre sí utilizando los nombres de host que Docker asigna automáticamente a cada contenedor (por ejemplo, postgres-container
y pgadmin-container
).
Consideraciones adicionales
- Asegúrate de que no haya conflictos de puerto si estás ejecutando otros servicios en tu máquina local en los mismos puertos (
5432
para PostgreSQL y8080
para pgAdmin en este caso). Esto es importante si estas ejecutando otros contenedores. - Puedes modificar los nombres de los contenedores (
--name
) según tus preferencias, pero asegúrate de reflejar esos cambios en cualquier configuración que dependa de esos nombres (como enlaces de red o configuraciones de aplicaciones). - Esta configuración básica te permitirá acceder a PostgreSQL desde pgAdmin utilizando el nombre de host del contenedor PostgreSQL y el puerto mapeado.
Con estos pasos, deberías tener ambos contenedores Docker ejecutándose en la misma red (pg-network
) y capaces de comunicarse entre sí.
PgAdmin
Una vez que el contenedor esté en ejecución, abre tu navegador web y visita http://localhost:5050
. Si has configurado el mapeo de puertos con un número diferente, reemplaza 5050
con el puerto que hayas especificado. Usa el correo electrónico y la contraseña que configuraste en el paso 3 (PGADMIN_DEFAULT_EMAIL
y PGADMIN_DEFAULT_PASSWORD
) para iniciar sesión en pgAdmin.
Para registrar tu primer servidor PostgreSQL en pgAdmin desde Docker, siguiendo tu configuración donde ya tienes contenedores los Docker PostgreSQL y pgAdmin configurados en la misma red, tienes dos opciones: dirección ip
vs red docker
. Para probar esto puedes seguir estos pasos básicos:
-
Obtener la dirección IP del contenedor PostgreSQL:
-
Es importante que tengas la IP del contenedor PostgreSQL para poder conectarte desde pgAdmin.
-
Puedes obtener la IP del contenedor PostgreSQL ejecutando el siguiente comando en tu terminal:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nombre_del_contenedor_postgres
Reemplaza
nombre_del_contenedor_postgres
con el nombre real de tu contenedor PostgreSQL.
-
-
Acceder a pgAdmin desde tu navegador:
- Abre tu navegador y visita
http://localhost:5050
(o el puerto que hayas configurado para pgAdmin). - Inicia sesión con el correo electrónico y la contraseña que configuraste al crear el contenedor de pgAdmin.
- Abre tu navegador y visita
-
Registrar el servidor en pgAdmin:
-
Una vez que hayas iniciado sesión en pgAdmin, sigue estos pasos para registrar tu servidor PostgreSQL:
-
En el panel de la izquierda, bajo "Servers", haz clic con el botón derecho y selecciona "Create" > "Server...".
-
Se abrirá un formulario para configurar el nuevo servidor.
-
En la pestaña "General":
- En el campo "Name", ingresa un nombre descriptivo para tu servidor PostgreSQL.
- En "Connection", puedes ingresar cualquier nombre que desees para identificar la conexión.
- En "Hostname/address", ingresa la dirección IP del contenedor PostgreSQL que obtuviste en el paso 1 o puedes usar el nombre de la red docker que creaste
pg-network
lo cual es más practico ya que direcciónip
del contenedor PostgreSQL cambia con cada reinicio del contenedor. - En "Port", deja el puerto como
5432
, que es el puerto por defecto de PostgreSQL. - En "Username" y "Password", ingresa las credenciales de tu base de datos PostgreSQL. Estas credenciales dependen de cómo configuraste tu contenedor PostgreSQL al iniciarlo.
-
Haz clic en "Save" para guardar la configuración del servidor.
-
-
-
Conectar al servidor PostgreSQL:
- Una vez guardado, el servidor debería aparecer en el panel izquierdo de pgAdmin bajo "Servers".
- Para conectar, haz doble clic en el servidor que acabas de agregar. pgAdmin intentará conectarse usando las credenciales que proporcionaste.
- Si la conexión es exitosa, podrás ver la estructura de tu base de datos y ejecutar consultas desde pgAdmin.
Siguiendo estos pasos, deberías poder registrar y conectarte a tu servidor PostgreSQL desde pgAdmin sin necesidad de especificar direcciones IP externas, siempre y cuando estén en la misma red de Docker y puedas acceder a ellos localmente.