PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak korzystać z kontenera PostgreSQL z istniejącymi danymi?

Aby wykorzystać odpowiedź irakli, oto zaktualizowane rozwiązanie:

  • użyj nowszej wersji 2 pliku Docker Compose
  • oddzielne volumes sekcja
  • usunięto dodatkowe ustawienia

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demonstracja

Uruchom serwer bazy danych Postgres:

$ docker-compose up

Pokaż wszystkie tabele w bazie danych. W innym terminalu porozmawiaj z Postgresem kontenera:

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

Nic nie pokaże, ponieważ baza danych jest pusta. Utwórz tabelę:

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

Wymień nowo utworzoną tabelę:

$ 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 |                   | 

Tak! Uruchomiliśmy bazę danych Postgres przy użyciu współdzielonego woluminu pamięci masowej i zapisaliśmy w niej niektóre dane. Następnym krokiem jest sprawdzenie, czy dane faktycznie pozostają po zatrzymaniu serwera.

Teraz zabij kontener serwera Postgres:

$ docker-compose stop

Uruchom ponownie kontener Postgres:

$ docker-compose up

Spodziewamy się, że serwer bazy danych ponownie wykorzysta pamięć, więc nasze bardzo ważne dane nadal tam są. Sprawdź:

$ 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 |                   | 

Pomyślnie użyliśmy nowego stylu pliku Docker Compose do uruchomienia bazy danych Postgres przy użyciu zewnętrznego woluminu danych i sprawdziliśmy, czy przechowuje on nasze dane w bezpiecznym i zdrowym stanie.

przechowywanie danych

Najpierw utwórz kopię zapasową, przechowując nasze dane na hoście:

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

Usuń nasze dane z bazy danych gości:

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

Przywróć naszą kopię zapasową (przechowywaną na hoście) do kontenera Postgres.

Uwaga: użyj "exec -i", nie "-it", w przeciwnym razie otrzymasz błąd "urządzenie wejściowe nie jest TTY".

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

Wymień tabele, aby sprawdzić, czy przywracanie zadziałał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 |                   | 

Podsumowując, sprawdziliśmy, że możemy uruchomić bazę danych, dane utrzymują się po restarcie i możemy przywrócić do niej kopię zapasową z hosta.

Dzięki 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. Normalizuj indeksy tablicy dla tablicy 1-wymiarowej, aby zaczynały się od 1

  2. Optymalizacja zapytań w PostgreSQL. WYJAŚNIJ podstawy – część 2

  3. Jak usunąć wszystkie tabele z bazy danych PostgreSQL?

  4. Czy istnieje spadek wydajności przy użyciu dziesiętnych typów danych (MySQL / Postgres)

  5. Przechowywanie obrazów w PostgreSQL