Dump postgres RDS DB bằng cách sử dụng Docker

Trong 1 số dự án đặc biệt, không có postgres trong máy, nhưng lại cần chạy lệnh pg_dump để dump dữ liệu, hoặc pg_dump version không match. Nếu không match thì chạy lệnh sẽ bị lỗi:

pg_dump: error: aborting because of server version mismatch

Cần nâng cấp Postgres, nhưng cài đặt pg thì chưa chắc cài được, vì có thể bị network firewall rules chặn các repo cài đặt.

\=> Sử dụng thông qua Docker:

Pull và chạy image dưới quyền root:

docker pull postgres

docker run -it --rm \
  --user root \
  postgres bash

Bên trong docker container chạy:

pg_dump -h <rds_endpoint> -U <db_username> -f <dbname>.sql <dbname>

pg_dump -Fc -v -h <rds_endpoint> -U <db_username> <dbname> > <dbname>.dump

Nhập password đúng, thì sẽ tạo ra được file <dbname>.sql và <dbname>.dump trong thư mục / của container.

Sau đó copy ra ngoài host:

docker cp <containerId>:/file/path/within/container /host/path/target

Lúc này bạn đã có file dumps ở host, bạn có thể lấy ra sử dụng.

Thực ra thì: P.S trong ảnh sau là điều mình muốn nói ở tình huống này =))))