sql >> Database >  >> RDS >> PostgreSQL

Hoe gebruik je een PostgreSQL-container met bestaande gegevens?

Om voort te bouwen op het antwoord van irakli, is hier een bijgewerkte oplossing:

  • gebruik nieuwere versie 2 Docker Compose-bestand
  • afzonderlijke volumes sectie
  • extra instellingen verwijderd

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demo

Start de Postgres-databaseserver:

$ docker-compose up

Toon alle tabellen in de database. Praat in een andere terminal met Postgres van de container:

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

Er wordt niets weergegeven, omdat de database leeg is. Maak een tabel:

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

Maak een lijst van de nieuw gemaakte 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 |                   | 

Hoera! We zijn nu een Postgres-database gestart met behulp van een gedeeld opslagvolume en hebben er enkele gegevens in opgeslagen. De volgende stap is om te controleren of de gegevens daadwerkelijk blijven hangen nadat de server is gestopt.

Dood nu de Postgres-servercontainer:

$ docker-compose stop

Start de Postgres-container opnieuw op:

$ docker-compose up

We verwachten dat de databaseserver de opslag opnieuw zal gebruiken, dus onze zeer belangrijke gegevens zijn er nog steeds. Controleer:

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

We hebben met succes een Docker Compose-bestand in nieuwe stijl gebruikt om een ​​Postgres-database uit te voeren met behulp van een extern gegevensvolume en hebben gecontroleerd of het onze gegevens veilig houdt.

gegevens opslaan

Maak eerst een back-up en bewaar onze gegevens op de host:

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

Zap onze gegevens uit de gastendatabase:

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

Herstel onze back-up (opgeslagen op de host) in de Postgres-container.

Opmerking: gebruik "exec -i", niet "-it", anders krijgt u de foutmelding "invoerapparaat is geen TTY".

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

Maak een lijst van de tabellen om te controleren of het herstel werkte:

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

Samenvattend:we hebben geverifieerd dat we een database kunnen starten, de gegevens blijven bestaan ​​na een herstart en we kunnen er een back-up in herstellen vanaf de host.

Bedankt Tomasz!



  1. Rails 4 LIKE-query - ActiveRecord voegt aanhalingstekens toe

  2. Hoe gegevens exporteren als CSV-indeling van SQL Server met behulp van sqlcmd?

  3. Hoe kopieer of importeer ik Oracle-schema's tussen twee verschillende databases op verschillende servers?

  4. Verandert het resource-ID elke keer dat een toepassing wordt gestart?