sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur använder man en PostgreSQL-behållare med befintliga data?

För att bygga vidare på iraklis svar, här är en uppdaterad lösning:

  • använd nyare version 2 Docker Compose-fil
  • separata volumes avsnitt
  • extra inställningar raderade

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demo

Starta Postgres databasserver:

$ docker-compose up

Visa alla tabeller i databasen. I en annan terminal, prata med containerns Postgres:

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

Det visar ingenting, eftersom databasen är tom. Skapa en tabell:

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

Lista den nyskapade tabellen:

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

Jippie! Vi har nu startat en Postgres-databas med en delad lagringsvolym och lagrat en del data i den. Nästa steg är att kontrollera att datan faktiskt finns kvar efter att servern har stannat.

Avsluta nu Postgres-serverbehållaren:

$ docker-compose stop

Starta upp Postgres-behållaren igen:

$ docker-compose up

Vi förväntar oss att databasservern kommer att återanvända lagringen, så vår mycket viktiga data finns kvar. Kontrollera:

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

Vi har framgångsrikt använt en ny Docker Compose-fil för att köra en Postgres-databas med hjälp av en extern datavolym, och kontrollerat att den håller vår data säker och sund.

lagring av data

Gör först en säkerhetskopia och lagra vår data på värden:

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

Zappa vår data från gästdatabasen:

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

Återställ vår säkerhetskopia (lagrad på värden) i Postgres-behållaren.

Obs! använd "exec -i", inte "-it", annars får du ett "indataenhet är inte en TTY"-fel.

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

Lista tabellerna för att verifiera att återställningen fungerade:

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

Sammanfattningsvis har vi verifierat att vi kan starta en databas, att data finns kvar efter en omstart och att vi kan återställa en säkerhetskopia till den från värden.

Tack Tomasz!



  1. Vad är en ODBC-kompatibel databas?

  2. Brister med mysql_real_escape_string?

  3. SQL-serverprestandastatistik för att ligga steget före i spelet

  4. SQLite onUpgrade() frustration