PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser un conteneur PostgreSQL avec des données existantes ?

Pour s'appuyer sur la réponse d'irakli, voici une solution mise à jour :

  • utiliser la version 2 du fichier Docker Compose plus récent
  • volumes volumes rubrique
  • paramètres supplémentaires supprimés

docker-compose.yml

version: '2'

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

volumes:
  data: {}

démo

Démarrez le serveur de base de données Postgres :

$ docker-compose up

Afficher toutes les tables de la base de données. Dans un autre terminal, parlez au Postgres du conteneur :

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

Il ne montrera rien, car la base de données est vide. Créer un tableau :

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

Lister la table nouvellement créée :

$ 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! Nous avons maintenant démarré une base de données Postgres en utilisant un volume de stockage partagé et y avons stocké des données. L'étape suivante consiste à vérifier que les données sont conservées après l'arrêt du serveur.

Maintenant, tuez le conteneur du serveur Postgres :

$ docker-compose stop

Redémarrez le conteneur Postgres :

$ docker-compose up

Nous nous attendons à ce que le serveur de base de données réutilise le stockage, donc nos données très importantes sont toujours là. Vérifier :

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

Nous avons utilisé avec succès un nouveau style de fichier Docker Compose pour exécuter une base de données Postgres à l'aide d'un volume de données externe, et nous avons vérifié qu'il conserve nos données en toute sécurité.

stocker des données

Tout d'abord, faites une sauvegarde, en stockant nos données sur l'hôte :

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

Zapez nos données de la base de données des invités :

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

Restaurez notre sauvegarde (stockée sur l'hôte) dans le conteneur Postgres.

Remarque : utilisez "exec -i", pas "-it", sinon vous obtiendrez une erreur "le périphérique d'entrée n'est pas un TTY".

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

Listez les tables pour vérifier que la restauration a fonctionné :

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

Pour résumer, nous avons vérifié que nous pouvons démarrer une base de données, les données persistent après un redémarrage et nous pouvons y restaurer une sauvegarde depuis l'hôte.

Merci Tomasz !