PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвам PostgreSQL контейнер със съществуващи данни?

За да надградим отговора на irakli, ето актуализирано решение:

  • използвайте по-нова версия 2 Docker Compose файл
  • отделни volumes раздел
  • допълнителните настройки са изтрити

docker-compose.yml

version: '2'

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

volumes:
  data: {}

демо

Стартирайте Postgres сървър на база данни:

$ docker-compose up

Показване на всички таблици в базата данни. В друг терминал говорете с Postgres на контейнера:

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

Няма да покаже нищо, тъй като базата данни е празна. Създайте таблица:

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

Избройте новосъздадената таблица:

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

Ура! Вече стартирахме база данни на Postgres, използвайки споделен обем за съхранение и съхранявахме някои данни в нея. Следващата стъпка е да проверите дали данните действително остават след спиране на сървъра.

Сега убийте контейнера на сървъра на Postgres:

$ docker-compose stop

Стартирайте отново контейнера Postgres:

$ docker-compose up

Очакваме сървърът на базата данни да използва повторно хранилището, така че нашите много важни данни все още са там. Проверете:

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

Успешно използвахме файл Docker Compose в нов стил, за да стартираме база данни на Postgres, използвайки външен обем данни, и проверихме дали той поддържа данните ни безопасни и здрави.

съхранение на данни

Първо, направете резервно копие, съхранявайки нашите данни на хоста:

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

Извадете нашите данни от базата данни за гости:

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

Възстановете нашия архив (съхранен на хоста) в контейнера Postgres.

Забележка: използвайте "exec -i", не "-it", в противен случай ще получите грешка "входното устройство не е TTY".

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

Избройте таблиците, за да проверите дали възстановяването работи:

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

За да обобщим, потвърдихме, че можем да стартираме база данни, данните се запазват след рестартиране и можем да възстановим резервно копие в нея от хоста.

Благодаря Томаш!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. защо PG::UniqueViolation:ГРЕШКА:дублираната стойност на ключа нарушава уникалното ограничение?

  2. Може ли PostgreSQL да извърши свързване между две съхранени процедури на SQL Server?

  3. Как да постигнем висока наличност на PostgreSQL с pgBouncer

  4. Postgres:командата vacuum не почиства мъртвите кортежи

  5. Как Cosd() работи в PostgreSQL