Skip to main content

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.

note

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:

  1. MAX(tpep_pickup_datetime): Encuentra la fecha y hora más reciente en la que se registró un viaje.
  2. MIN(tpep_pickup_datetime): Encuentra la fecha y hora más antigua en la que se registró un viaje.
  3. 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 Docker pg-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 Docker pg-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 y 8080 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:

  1. 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.

  2. 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.
  3. 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ón ip 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.

  4. 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.