9 bước đơn giản nâng cấp từ Postgresql phiên bản cũ lên Postgresql 14 chạy trong Docker

Ngày 30/9/2021, Postgresl 14 ra mắt với nhiều tính năng cải tiến. Giả sử bạn đang có một hệ CSDL Postgresql phiên bản cũ (gọi tắt là Postgresql cũ) chạy trong Docker, vậy làm sao để nâng cấp hệ CSDL này lên Postgresql 14? Tôi sẽ sử dụng công cụ pg_dumpall để backup dữ liệu ở Postgresql cũ rồi khôi phục vào Postgresql 14.

  1. Sử dụng Pgadmin hoặc Dbeaver hoặc psql kết nối vào hệ CSDL hiện giờ truy vấn thông tin phiên bản bằng lệnh SELECT version();
    Kết quả

    PostgreSQL 12.8 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit

    dbeaver

  2. Lấy container id của Postgresql cũ bằng lệnh ps hoặc trực quan dùng ctop. Bạn phải cài bổ xung ctop từ web site https://github.com/bcicen/ctop
    ctop
    Ở hình trên {old_postgres_container_id} = 910742cdfc0b

  3. Chạy lệnh which pg_dumpall bên trong postgresql container để biết đường dẫn đến công cụ này.

    $ docker exec -it {old_postgres_container_id} which pg_dumpall
    /usr/local/bin/pg_dumpall
  4. Sau khi có đường dẫn chính xác của pg_dumpall thì sao lưu tất cả database trong Postgresql cũ

    $ docker exec -it {old_postgres_container_id} /usr/local/bin/pg_dumpall -U postgres > backup/dumpfile
  5. Khởi động container Postgresql14 mới hoàn toàn.

    $ docker run --name pg14 -d -p 5432:5432 -e POSTGRES_PASSWORD=123 -v db_data:/var/lib/postgresql/data -v $(pwd)/backup:/backup postgres:14-alpine3.14

    Chú ý chúng ta map 2 volume:

    • db_data:/var/lib/postgresql/data: map docker volume db_data với thư mục dữ liệu của Postgresql
    • $(pwd)/backup:/backup: map thư mục chứa dumpfile vào thư mục /backup bên trong container
  6. Lấy id của container Postgresql 14 tạm gọi là {new_postgres_container_id}

    pg14_id

  7. Exec vào trong container Postgresql 14, rồi thử list /backup/dumpfile

    $ docker exec -it {new_postgres_container_id} /bin/ash
    $ ls -all /backup/dumpfile
    -rw-r--r--    1 root     root     543444597 Oct  3 03:10 /backup/dumpfile
  8. Khôi phục backup/dumpfile vào Postgresql 14 container mới
    Thực hiện

    $ psql -U postgres -d postgres < backup/dumpfile
  9. Dùng DBeaver kết nối vào Postgresql 14 kiểm tra version bằng lệnh SELECT version();
    Kết quả trả về
    PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit

Đánh giá chung

  • Tốc độ ở những câu lệnh truy vấn đơn giản, Postgresql 14 không nhanh hơn 12, thậm chí chậm hơn chút xíu
  • Postgresql 14 hỗ trợ thao tác trên kiểu dữ liệu JSON rất tốt. Nhiều lệnh mới hoàn toàn, không có trong Postgresql Thử copy những lệnh ở link này jsonb Containment and Existence