PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để sử dụng vùng chứa PostgreSQL với dữ liệu hiện có?

Để xây dựng câu trả lời của irakli, đây là một giải pháp được cập nhật:

  • sử dụng tệp Docker Compose phiên bản 2 mới hơn
  • các tập volumes phần
  • cài đặt bổ sung đã bị xóa

docker-compost.yml

version: '2'

services:
  postgres9:
    image: postgres:9.4
    expose:
      - 5432
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data: {}

bản trình diễn

Khởi động máy chủ cơ sở dữ liệu Postgres:

$ docker-compose up

Hiển thị tất cả các bảng trong cơ sở dữ liệu. Trong một thiết bị đầu cuối khác, hãy nói chuyện với Postgres của vùng chứa:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'

Nó sẽ không hiển thị gì vì cơ sở dữ liệu trống. Tạo bảng:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'

Liệt kê bảng mới được tạo:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

Yay! Bây giờ chúng tôi đã bắt đầu cơ sở dữ liệu Postgres bằng cách sử dụng dung lượng lưu trữ được chia sẻ và lưu trữ một số dữ liệu trong đó. Bước tiếp theo là kiểm tra xem dữ liệu có thực sự tồn tại xung quanh sau khi máy chủ dừng không.

Bây giờ, hãy hủy vùng chứa máy chủ Postgres:

$ docker-compose stop

Khởi động lại vùng chứa Postgres:

$ docker-compose up

Chúng tôi hy vọng rằng máy chủ cơ sở dữ liệu sẽ sử dụng lại dung lượng lưu trữ, vì vậy dữ liệu rất quan trọng của chúng tôi vẫn ở đó. Kiểm tra:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

Chúng tôi đã sử dụng thành công tệp Docker Compose kiểu mới để chạy cơ sở dữ liệu Postgres bằng cách sử dụng khối lượng dữ liệu bên ngoài và kiểm tra xem nó có giữ cho dữ liệu của chúng tôi an toàn và ổn định hay không.

lưu trữ dữ liệu

Trước tiên, hãy sao lưu, lưu trữ dữ liệu của chúng tôi trên máy chủ:

$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql

Zap dữ liệu của chúng tôi từ cơ sở dữ liệu khách:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'

Khôi phục bản sao lưu của chúng tôi (được lưu trữ trên máy chủ) vào vùng chứa Postgres.

Lưu ý: sử dụng "executive -i", not "-it", nếu không bạn sẽ gặp lỗi "thiết bị đầu vào không phải là TTY".

$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql

Liệt kê các bảng để xác minh khôi phục đã hoạt động:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

Tóm lại, chúng tôi đã xác minh rằng chúng tôi có thể khởi động cơ sở dữ liệu, dữ liệu vẫn tồn tại sau khi khởi động lại và chúng tôi có thể khôi phục bản sao lưu vào nó từ máy chủ.

Cảm ơn Tomasz!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình điều khiển HikariCP Postgresql Tuyên bố không chấp nhận URL JDBC

  2. Tôi nên chọn loại dấu thời gian nào trong cơ sở dữ liệu PostgreSQL?

  3. MigrationSchemaMissing (Không thể tạo bảng django_migrations (% s)% exc)

  4. Cập nhật nhiều hàng trong cùng một truy vấn bằng PostgreSQL

  5. Làm cách nào để nhập tệp JSON vào PostgreSQL?