Outils pour utilisateurs

Outils du site


informatique:versionnement_dev_bdd

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
informatique:versionnement_dev_bdd [2022/03/25 10:06] – [Versionner le développement d'une base de données PostgreSQL] bertrandinformatique:versionnement_dev_bdd [2022/09/08 11:37] (Version actuelle) – [Mise en pratique] bertrand
Ligne 3: Ligne 3:
 <note>Lors de l'utilisation d'un framework, l'utilisation d'un ORM, comme Doctrine avec Symfony ou Eloquent avec Laravel, facilite cette démarche. Cette page précise la démarche en l'absence de framework, par exemple pour la mise en œuvre d'un micro-services ou web-services simplement basé sur postgres/postgis et postgREST, cf. le tuto [[informatique:api-rest:postgrest|PostgREST]] </note> <note>Lors de l'utilisation d'un framework, l'utilisation d'un ORM, comme Doctrine avec Symfony ou Eloquent avec Laravel, facilite cette démarche. Cette page précise la démarche en l'absence de framework, par exemple pour la mise en œuvre d'un micro-services ou web-services simplement basé sur postgres/postgis et postgREST, cf. le tuto [[informatique:api-rest:postgrest|PostgREST]] </note>
  
-Ce tutoriel s'appuie sur les logiciels [[https://pgmodeler.io/|PgModeler]], [[https://git-scm.com/|Git]] et dans une moindre mesure sur [[https://dbeaver.io/|DBeaver]].+Ce tutoriel s'appuie sur les logiciels [[https://pgmodeler.io/|PgModeler]], [[https://git-scm.com/|Git]] et dans une moindre mesure sur [[https://dbeaver.io/|DBeaver]],\\ utilisés sous le système d'exploitation [[https://www.ubuntu-fr.org/|Ubuntu]]
  
 ===== Besoin ===== ===== Besoin =====
Ligne 18: Ligne 18:
  
 ===== Déploiement en "production ===== ===== Déploiement en "production =====
-Une fois le développement et les tests finaliser localement, il suffit de les exécuter sur le serveur de production, soit via DBeaver s'il a accès à la base de données, soit via la CLI… par exemple :\\+Une fois le développement et les tests finalisés localement, il suffit de les exécuter sur le serveur de production, soit via DBeaver s'il a accès à la base de données, soit via la CLI… par exemple :\\
 <code bash>docker exec -i nom_du_conteneur /bin/bash -c "psql -U mon_db_user -d nom_de_la_base" < mon_chemin/mon_script_de_migration.sql</code> <code bash>docker exec -i nom_du_conteneur /bin/bash -c "psql -U mon_db_user -d nom_de_la_base" < mon_chemin/mon_script_de_migration.sql</code>
  
Ligne 30: Ligne 30:
 Nous allons reprendre en partie le tutoriel sur [[:informatique:api-rest:postgrest|postgREST]], en réalisant la modélisation et génération des scripts de migration avec PgModeler, le versionnement avec git, la visualisation avec DBeaver (ou en CLI avec psql) Nous allons reprendre en partie le tutoriel sur [[:informatique:api-rest:postgrest|postgREST]], en réalisant la modélisation et génération des scripts de migration avec PgModeler, le versionnement avec git, la visualisation avec DBeaver (ou en CLI avec psql)
  
-Tout d'abord, on crée un conteneur docker pour disposer d'un serveur Postgis :+Tout d'abord, on crée un conteneur [[https://doc.ubuntu-fr.org/docker|docker]] pour disposer d'un serveur Postgis :
 <code bash>docker run --name tutorial -p 5433:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgis/postgis:13-3.1-alpine</code> <code bash>docker run --name tutorial -p 5433:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgis/postgis:13-3.1-alpine</code>
  
Ligne 40: Ligne 40:
 On peut évidemment sauvegarder notre début de modèle. On peut évidemment sauvegarder notre début de modèle.
  
-Et on génère notre premier script SQL, toujours avec PgModeler en cliquant sur le bouton //Export// puis on sélectionne //SQL file// et on saisit un nom de fichier, par exemple //1_create_schema_and_fist_table// (l'extension .sql est automatiquement ajoutée)+Et on génère notre premier script SQL, toujours avec PgModeler en cliquant sur le bouton //Export// puis on sélectionne //SQL file// et on saisit un nom de fichier, par exemple //1_create_schema_and_first_table// (l'extension .sql est automatiquement ajoutée)
 On peut éditer ce script (avec votre éditeur de code préféré, pour ma part Vim) et vérifié un peu ce qui a été généré, par exemple pour la table, j'ai : On peut éditer ce script (avec votre éditeur de code préféré, pour ma part Vim) et vérifié un peu ce qui a été généré, par exemple pour la table, j'ai :
 <code sql> <code sql>
Ligne 54: Ligne 54:
 On applique ce script : On applique ce script :
 <code bash> <code bash>
-docker exec -i tutorial /bin/bash -c "psql -U postgres" < database/1_create_schema_and_fist_table.sql+docker exec -i tutorial /bin/bash -c "psql -U postgres -d tutorial" < database/1_create_schema_and_first_table.sql
 </code> </code>
-On peut vérifier avec DBeaver ou psql que la base/schéma/table ont bien été créé. TODO pourquoi je retrouve mon schéma dans la base POSTGRES et non tutorial ??+On peut vérifier avec DBeaver ou psql que la base/schéma/table ont bien été créé. Dans la commande ci-dessus, l'option //-d tutorial// qui permet de préciser la base de données contenant le schéma est importante sinon on retrouve le schéma dans la base POSTGRES et non tutorial !
  
 On commence notre versionnement : On commence notre versionnement :
 <code bash> <code bash>
 git init # inutile si associé à un projet existant qui est déja versionné git init # inutile si associé à un projet existant qui est déja versionné
-git add 1_create_schema_and_fist_table.sql+git add 1_create_schema_and_first_table.sql
 git commit -m "init et ajout du schema initial" git commit -m "init et ajout du schema initial"
 </code> </code>
-On peut faire aussi une copie de //1_create_schema_and_fist_table.sql// vers //tutorial_location.sql//. Les fichiers //1_//, //2_// (ou un préfixe de date AAAAMMJJ) ne contiendront que les scripts de migration (et n'évolueront donc pas), en revanche le fichier //tutorial_location.sql// pourra recevoir régulièrement un export complet de la base et servir ainsi à un nouveau développeur (qui pourrait repartir d'un dump de sauvegarde pour avoir des données avec)+On peut faire aussi une copie de //1_create_schema_and_first_table.sql// vers //tutorial_location.sql//. Les fichiers //1_//, //2_// (ou un préfixe de date AAAAMMJJ) ne contiendront que les scripts de migration (et n'évolueront donc pas), en revanche le fichier //tutorial_location.sql// pourra recevoir régulièrement un export complet de la base et servir ainsi à un nouveau développeur (qui pourrait repartir d'un dump de sauvegarde pour avoir des données avec)
  
 ===== Modification du modèle ===== ===== Modification du modèle =====
Ligne 89: Ligne 89:
 -- ddl-end -- -- ddl-end --
 </code> </code>
 +<note warning>Si le fichier contient des commandes GRANT, assurez-vous que c'est pour des rôles qui existent bien sur le serveur !</note>
 que l'on applique à notre base de donnée : que l'on applique à notre base de donnée :
 <code bash> <code bash>
-docker exec -i tutorial /bin/bash -c "psql -U postgres -d tutorial" < 2_table-town-ajout-canonical-name.sql+docker exec -i tutorial bash -c "psql -U postgres -d tutorial" < 2_table-town-ajout-canonical-name.sql
 </code> </code>
  
informatique/versionnement_dev_bdd.1648199173.txt.gz · Dernière modification : 2022/03/25 10:06 de bertrand