Aprende a restaurar un dump de Postgres en una base de datos nueva usando la consola en AWS. Verás cómo instalar las herramientas con Yum, descargar el PG dump con wget, importarlo con psql y validar tablas y datos. Además, cuidarás la compatibilidad de versiones (ejemplo: 9.6 en Amazon) y la seguridad del password, y entenderás la compatibilidad entre RDS Postgres y Aurora Postgres.
¿Cómo preparar las herramientas de Postgres en la consola?
Para usar la línea de comandos de Postgres, primero se instalan las herramientas del cliente. En el ejemplo se usa la versión 9.6 en Amazon y se recomienda que la versión del cliente coincida con la del servidor para evitar problemas.
Convertirse en root con sudo su.
Instalar la línea de comandos de Postgres con Yum para la versión usada en Amazon 9.6.
Salir de root y continuar con el usuario normal.
# convertirse en rootsudosu# instalar herramientas de línea de comandos de Postgres 9.6yum install postgresql96
# salir de rootexit
¿Cómo descargar el PG dump y cargarlo con psql?
El PG dump está disponible como recurso en la información de URLs. Abre el archivo en modo Raw para copiar la URL, conéctate a la instancia y descárgalo con wget. Luego usa psql para importar el SQL a tu base de datos destino.
Abrir la URL del dump en modo Raw y copiarla.
En la instancia, descargar con wget y verificar que el archivo quede local.
Ejecutar psql con parámetros de conexión y redirección del archivo SQL.
Ingresar el password de forma interactiva para no exponerlo en la línea de comandos.
# descargar el dump desde la URL en modo Rawwget URL_DEL_DUMP
# importar el dump a la base de datosecho"ingresará password de forma interactiva"psql -h HOST -U USUARIO NOMBRE_DB < sample/uk/zipcodes.sql
¿Qué significan los flags de psql?
-h: el host o servidor al que te conectas.
-U: el usuario de la base de datos.
NOMBRE_DB: la base de datos destino donde cargar el dump.
<: redirección del archivo SQL al comando psql.
¿Cómo manejar el password de forma segura?
Evita incluir el password en la línea de comandos.
Deja que psql lo solicite y escríbelo de forma interactiva.
¿Cómo verificar tablas y datos y qué pasa con Aurora Postgres?
Después de importar, conéctate de nuevo con psql pero sin redirección, y revisa las tablas y el contenido. Usa el listado de tablas y una consulta simple para confirmar que se cargaron datos como los códigos y nombres del ejemplo.
Repetir la conexión con psql e ingresar el password.
Listar todas las tablas con \dt.
Consultar datos con SELECT.
# conectarte sin redirecciónpsql -h HOST -U USUARIO NOMBRE_DB
-- dentro de psql\dt
SELECT*FROM CCGS;
Sobre AWS: tanto RDS Postgres como Aurora Postgres son compatibles a nivel de herramientas de conexión, por lo que puedes realizar el mismo procedimiento. Aurora ofrece funcionalidades extra, pero el flujo de importación con psql se mantiene igual.
Habilidades y conceptos que practicas:
Instalación y uso de clientes de Postgres con Yum.
Descarga de recursos con wget desde una URL en modo Raw.
Importación de un PG dump mediante redirección a psql.
Manejo seguro del password sin exponerlo en la consola.
Validación con \dt y consultas SELECT tras la importación.
Entendimiento de la compatibilidad entre RDS Postgres y Aurora Postgres.
¿Tienes dudas sobre los comandos o la conexión en AWS? Compártelas en los comentarios y cuéntanos qué te gustaría automatizar en tu flujo de importación.
Crear un grupo de permisos (security Groups) del tipo Postgresql, protocolo TCP, puerto 5432 (o el que estés manejando), con permisos de conexión desde cualquier lugar.
Crear la base de datos Postgresql en el menú RDS en el servicio de bases de datos de AWS. Recuerda que la versión de Postgresql debe de ser 9.6.x. Define la BD como pública y asignale el protocolo VPC que creaste en el punto anterior. (esto tomará algunos minutos). También puedes definir el nombre de la base de datos, un usuario y un password. (aunque también se pueden asignar por defecto)
luego en la línea de comando desde la conexión de la sentencia ingresando el siguiente script tomado de aquí:
Si no asignaste un nombre de usuario y de base de datos utiliza por defecto username=postgres dbname=postgres
Me cuentan si les funciona, a mi me funciono.
saludos. 😎
Excelente aporte!!!
Muchísimas gracias, tu aporte ha sido fantástico! Al principio no me funcionaba pero la clave estuvo en crear un Grupo de Seguridad con el protocolo TCP y el puerto: 5432 y luego asignárselo a la base de datos.
Para los próximos Alumnos, Mauro omitió como crear la RDS…
Tienen que crearla por su cuenta y al final seleccionar el checkbox de RDS Free Usage Tier…
Omitió esa parte y las demás opciones que se deben configurar para que funcione el ejemplo que el muestra en este vídeo.
No olviden usar el mismo Availability zone y agregar la ip al segurity group de la DB, cuando esten haciendo el proceso de crearla, aparte de tener :
Publicly accessible
Yes
Debido a que la BD se crea bajo una VPC con un security group, es neceasrio hacer agregar una relga para permitir las conexiones a través del protocolo TCP.
Se debe ir a security grupos y luego hacer clic en Edit inbound rules
La configuración de la regla en los security groups es así:
gracias fue de gran ayuda
Gracias
Falto mucha configuración. Si es la primera vez con AWS y RDS queda uno con muchas dudas y grandes vacíos al configurar RDS. Nunca pude conectar mi instancia EC2 a la base de datos ni encontre cual era la manera correcta de configurar los grupos de seguridad. Esta clase me decepcionó un montón.
La verdad el curso hasta donde voy esta muy flojito, va tocar UdeMy para esto. Como en el Docker que no aprendí cosas demasiado básicas y toco ir a hacer uno aparte
Detalles para realizar lo del video ante errores de conexión como el siguiente:
Para solucionarlo realizamos los siguientes pasos:
Permitir el trafico TCP del puerto 5432 que usa PostgreSQL en el grupo de seguridad que tiene nuestra instancia EC2:
Luego de realizar clic y entrar al grupo de seguridad nos vamos a reglas de entrada y agregamos las siguientes reglas:
Ahora realizamos lo mismo pero las reglas las aplicamos en el grupo de seguridad VPC que tiene nuestra base de datos creada en RDS:
Luego de entrar al grupo de seguridad agregamos las mismas reglas que en nuestra instancia EC2:
Para finalizar ejecutamos el comando nuevamente y podemos acceder sin problemas:
Espero haya sido de ayuda.
Fue de mucha ayuda, gracias.
Maestro, muchas gracias por la complementacion!!!
Para quienes aún no les funciona, aún falta más por hacer:
Al momento de crear la base de datos como lo mencione en mi comentario anterior, hay una opción que dice algo como “VPC group” y la opción de añadir uno ya existente, entonces añaden el grupo de seguridad que les aparece, que es el mismo que crearon al momento de crear la instación de EC2 y también añaden un poco más abajo la llave .pem de ese grupo.
Luego también deben marcar una opción dentro de las opciones de creación de la base de datos que dice que si quieren que su base de datos sea publica en el minuto 2:06 ustedes ven del lado derecho que dice “Publicly accesible YES”
Luego de eso, van a su instancia de EC2 y en las politicas de su grupo de seguridad agregan una nueva regla de entrada o Inbound, buscan el protocolo que dice Postgresql, dejan el puerto 5432 y la opción que se conecte desde cualquier ip.
Creo que eso fue todo lo que hice para que funcionara.
Gracias, en mi caso, tuve que crear un nuevo grupo de seguridad y específicamente asignarle el protocolo TCP, puerto 5432 y que habrían conexiones desde cualquier lugar. Ya luego, ese grupo de seguridad recién creado se lo asigné a mi base de datos postgres y listo, ya pude conectarme con mobaxterm a mi base de datos.
gracias, no me solicitaba la contraseña, y era solamente porque en mi regla de inbound no estaba para conectarse desde cualquier ip
Junio 2021
Debido a múltiples inconvenientes que ha tenido la comunidad.
En mi caso aporto lo siguiente:
También como lo han comentado los demás compañeros adicioné una regla a la política de seguridad. En mi caso fue específica para la instancia EC2, utilizando la IP Privada.
EC2 -> Instances
RDS>Databases
Modificar el grupo de seguridad
Editar las reglas de entrada como esta
Antes de conectarme a la base, probé que le pudiera llegar a la instancia de base de datos, utilizando el siguiente comando.
# check port connection
sudo yum -y install nc
nc -zv goweb-db1.cpbmxjibuaa6.us-east-2.rds.amazonaws.com5432#response
#cat:Connected to 172.31.2.36:5432.
Ok aquí me topé con otro problema, ya que en el paso anterior no creé la base de datos, e hice lo siguiente:
#instalando cliente postgres
sudo su
yum install -y postgresql
exit
#conexión con el servidor
psql -h goweb-db1.cpbmxjibuaa6.us-east-2.rds.amazonaws.com-U postgres
# creando base de datos
postgres=>CREATEDATABASE platzidb WITHENCODING'UTF8';
#para salir \q
postgres=> \q
Nota: luego basado en otros comentarios, sí se había creado una base de datos por defecto llamada postgres
Luego seguí con los comandos que el profe indica en el vídeo y todo ok
Dejo también otros comandos útiles para el cliente plsql que me fueron útiles por mi poca experiencia con PostgreSQL
\l list databases
\l+ list databases with more details
select *from pg_database;select datname from pg_database;\dt list tables of a database
\c <database_name>switch to a database
\d <table_name> describing particular table name
CREATEDATABASE myDatabase WITHENCODING'UTF8'; create a database
\q salir
Espero sea de su ayuda!
Saludos,
José
muy agradecido definitivamente deben actualizar todos estos cursos
Alberto, eres un maquina hombre, me has salvado :)
Con todo respeto, me hubiera gustado poder hacer la prueba; primero, haber creado la bd en postgres con un solo registro, así hubiera tomado 2 o 3 minutos más el video; entiendo que no sea la sección indicada que tienen una especifica, pero lo que veo es que se va volviendo teórico, porque no podemos hacer la prueba.
se viene una sesión en vivo para el 10 de agosto enseñando esto =)
@ricardocelis, donde puedo ver la sesión que pasó el 10 de agosto. Gracias
Varias cosas por cambiar en este curso:
Agregar las reglas a VPC security groups
Para el import es necesario ejecutar este comando.
siendo -d postgres la base de datos que crea por defecto en la version 11.x de Postgresl
Es necesario re-crearlo o diseñar el curso a la versión actual de la consola.
gracias bro, tenia el error que decia platzidb does not exists con postgres version 12
Excelente aporte, llevo mucho intentando y pensé que tenia problemas de versiones ya que en la actualidad las versiones cambiaron
El repositorio en GitHub y el SQL.
Me sorprende entrar a este curso y ver que hay personas que de hace 2 años indiquen que hay pasos que falta o son omitidos en el curso y aun no lo solucione Platzi. Ademas de que en 2 años muchas cosas en AWS ya cambiaron.
Ya van 5 años...
¿Este video está incompleto o yo me perdí de algo?, ¿en qué momento se hizo la base de datos?
si vas al repositorio y miras el archivo sample-uk-zipcodes.sql que caga hay esta toda la estructura y los datos que cargo.
Curioso, aquí instalamos PG, pero realmente no usamos esa instalación, sino que realmente solo lo usamos para tener acceso al comando que subirá el archivo a la instancia de Amazon, eso significa que podríamos prescindir de tener que conectarnos a EC2 y hacerlo todo desde nuestra computadora si tenemos las herramientas necesarias 🤔
Vengo del futuro. Platzi publicó una actualización de esta clase al final de este curso. Aunque a fecha de 2022 ya han cambiado varias cosas, guiarse de los demás comentarios de esta clase.
Si no les funciona pueden probar con la siguiente linea:
psql -h url_db -U platzidb postgres <sample-uk-zipcodes.sql
donde: url_db = la url de su base de datos que aparece en la consola aws
Luego:
psql -h url_db -U platzidb postgres
y después \dt
El nombre de la base de datos seria postgres no platzidb
Si el curso es de Fundamentos de AWS, se están omitiendo detalles muy importantes, por ejemplo para este vídeo en donde el menciona el endpoint, este solo aparece cuando se crea una base de datos utilizando la opción de “Database” y luego la opción de “Create Database” y también hay que configurar varias cositas más al momento de crear esa base de datos, ejemplo la versión de postgresql que se instaló en el EC2 que en mi caso usando ubuntu 18.04 como sistema operativo de esa instancia se instalo la versión 10.6 y pueden saber que versión instalaron usando el comando “psql --version”
yum install postgresql
Ojala actuailcen este curso, muchas de las cosas que explican aqui ya no van, existen muchos problemas para conectarse al final con la db, dejo la solucion para quienes tienen el mismo problema:
despues de -h se introduce la direccion de la base de datos de aws
-U es el usuario, en este caso es el usuario que crea en automatico la db
-d la base de datos que crea de forma automatica
Espero les funcione! Saludos!
Si no te ha dejado ingresar desde la consola, lo que puede suceder es que no has creado una regla de un Security Group que permita la entrada desde el puerto 5432, que es a donde nos conectamos a Postgres. Para este caso, lo que hice fue agregarle una regla a uno de los grupos de seguridad que ya tenia de esta manera (previo a esto, fui a pestana de 'Connectivity & Security' de mi base de datos y baje a la parte de 'Security group roles', luego le doy clic al grupo 'default...' y ya me manda al menú de configuración de ese grupo de seguridad, lo selecciono y en 'actions' le doy 'edit inbound rules' y le agrego la nueva regla de esta manera:
Adicional me encontré una mejor forma de ejecutar el comando propuesto al momento de conectarse:
Luego solo ingreso el password y ejecutara el script, y después como indica el profesor, ejecutamos el mismo comando pero sin la parte final para ejecutar el script, así:
psql --host=rodckodb.cfkzcule0wtf.us-east-2.rds.amazonaws.com --port=5432 --username=rodckodb --password --dbname=rodckodb
Y ya podemos ingresar a la consola y podemos consultar con el lenguaje SQL:
En teoría conectarse desde la terminal y el ec2 puede facilitarse usando pgadmin4 no?