Comment contrôler la version du schéma PostgreSQL avec des commentaires?


9

Je contrôle la version la plupart de mon travail avec Git : code, documentation, configuration système. Je peux le faire parce que tout mon précieux travail est stocké sous forme de fichiers texte.

J'ai également écrit et traité de nombreux schémas SQL pour notre base de données Postgres. Le schéma comprend des vues, des fonctions SQL et nous écrirons des fonctions Postgres en langage de programmation R (via PL / R ).

J'essayais de copier et de dépasser le schéma de morceaux que moi et mes collaborateurs écrivons, mais j'oublie de le faire. La copie et l'action passée sont répétitives et sujettes aux erreurs.

La méthode pg_dump / pg_restore ne fonctionnera pas car elle perd les commentaires.

Idéalement, j'aimerais avoir un moyen d'extraire mon schéma actuel dans un ou plusieurs fichiers et conserver les commentaires afin de pouvoir faire le contrôle de version.

Quelle est la meilleure pratique pour le schéma de contrôle de version avec des commentaires?


2
Je ne pense pas que la question soit spécifique au psql. Avez-vous lu certaines des réponses sur SO stackoverflow.com/… ? Il y a peut-être quelque chose pour toi.
DrColossos

@DrColossos - certaines de ces questions sont de bons candidats à la migration.
CoderHawk

@DrColossos est COMMENT ONdisponible dans un environnement non postgres? Je ne pense pas que ce soit du SQL standard. ce qui signifie que cela pourrait être spécifique au postgres
xenoterracide

@xenoterracide Vous avez raison, je parlais plutôt d'un problème de versioning d'une base de données elle
DrColossos

Réponses:


9

Pourquoi ne pas COMMENT ONles différents SCHEMAcomposants, de cette façon vos commentaires sont dans le schéma et seront vidés.

COMMENT stocke un commentaire sur un objet de base de données.
Pour modifier un commentaire, émettez une nouvelle commande COMMENT pour le même objet. Une seule chaîne de commentaire est stockée pour chaque objet. Pour supprimer un commentaire, écrivez NULL à la place de la chaîne de texte. Les commentaires sont automatiquement supprimés lorsque l'objet est supprimé.


Vraiment utile, mais je ne veux pas marquer cela comme réponse pour le moment parce que j'espère obtenir une réponse aux meilleures pratiques.
Aleksandr Levchuk,

2

Les schémas de contrôle de version ont toujours été problématiques pour moi. Je contrôle généralement les versions du schéma généré par l'outil de modélisation de données que j'utilise. Le modèle est également contrôlé en version. J'utilise des différences entre le schéma actuel et le schéma précédent pour créer le correctif requis pour mettre à jour le schéma. Certains outils de modélisation créent des scripts de mise à jour de schéma utilisables. Les scripts de mise à jour sont également contrôlés par version.

Je vois parfois des scripts qui sont destinés à vider le schéma dans un format approprié pour régénérer le schéma. L'un d'eux peut être ce que vous recherchez. Certains des outils de modélisation et de requête sont capables de créer des scripts de régénération de schéma à partir d'un schéma existant. Si vous pouvez l'écrire, cela peut vous donner un fichier adapté au contrôle de version.


2

Une alternative (ou vous pouvez les combiner) à ma proposition précédente est d'écrire votre code SQL dans votre éditeur (IDE) et d'enregistrer les fichiers, et de les valider dans votre VCS, après cela, exécutez le code sur la base de données en utilisant psql -1f. De cette façon, le code est contrôlé par la version avant d'être exécuté.


"De cette façon, le code est contrôlé par la version avant d'être exécuté." Et ça devrait l'être.
Mike Sherrill 'Cat Recall'

@catcall ouais mais si vous lisez le post d'opérations, je ne pense pas que ce soit le cas.
xenoterracide

Ce n'est malheureusement pas le cas dans la plupart des endroits que j'ai vus. Mais c'est la seule façon de garantir que le code que vous testez et le contrôle qualité sont le même code que vous passez à la production. L'idée que la "vraie" base de données se trouve dans le VCS, pas dans le SGBD, n'est pas répandue.
Mike Sherrill 'Cat Recall'

0

Je travaille dans un projet similaire. Voici ma proposition de conception:

  1. Commenter les objets DB sur une base régulière permet de dire toutes les deux semaines ou deux fois par mois.
  2. faites pg_dump all (oui, obtenez tout pour vous assurer d'obtenir tous les petits détails et relations). Nommez-les par aaaammjj-VERSION.dump
  3. Si vous utilisez Git, utilisez un plugin pour les fichiers volumineux
  4. Si vous n'utilisez pas de référentiel, créez un tableau simple au format texte CSV comme le tableau ci-dessous:

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. en conservant une relation dans le fichier CSV des vidages générés par nom de fichier, vous pouvez les suivre facilement et vous vous assurez que la restauration fonctionnera car vous avez tout vidé.

De nos jours, tout stockage cloud ou stockage sur site ne devrait pas être aussi cher, même s'il s'agit de To de données. il y en a qui font rage de 700 à 1000 USD avec jusqu'à 16 To .

Vous pouvez même économiser beaucoup plus si vous passez à un cloud de stockage comme le type le plus populaire AWS S3

Si une bonne conception et des normes d'organisation sont définies pour garder une trace de toute l'infrastructure et des actifs informatiques, cela ne devrait pas être douloureux une fois mis en œuvre, cela peut être relativement simple et vous évitera des problèmes de configuration et, surtout, du temps ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.