En production, notre base de données a une taille de quelques centaines de gigaoctets. Pour le développement et les tests, nous devons créer des instantanés de cette base de données qui sont fonctionnellement équivalents, mais qui n'ont que 10 ou 20 Go de taille.Postgres vidage de parties de tables seulement pour un instantané de développement
Le défi réside dans le fait que les données de nos entités métier sont réparties sur plusieurs tables. Nous voulons créer une sorte d'instantané filtré afin que seulement certains des entités soient inclus dans la sauvegarde. De cette façon, nous pouvons obtenir de nouveaux snapshots tous les mois pour le développement et les tests.
Par exemple, disons que nous avons des entités qui ont ces nombreuses à plusieurs relations:
- Société a N Divisions
- Division a N employés
- employé a N présence enregistrements
Il y a peut-être 1000 entreprises, 2500 divisions, 175000 employés et des dizaines de millions d'enregistrements de présence. Nous voulons une façon réplicable de tirer, disons, les 100 premières entreprises et toutes ses divisions constituantes, les employés et les registres de présence.
Nous utilisons actuellement pg_dump pour le schéma, puis exécutez pg_dump avec --disable-triggers et --data-only pour extraire toutes les données des tables plus petites. Nous ne voulons pas avoir à écrire des scripts personnalisés pour extraire une partie des données car nous avons un cycle de développement rapide et nous craignons que les scripts personnalisés soient fragiles et susceptibles d'être périmés.
Comment pouvons-nous faire cela? Existe-t-il des outils tiers permettant de retirer des partitions logiques de la base de données? Comment s'appellent ces outils?
Un conseil général a également apprécié!
J'ai utilisé cette technique avec beaucoup de succès pour faire la même chose que l'OP. Pour les tests, j'ai chargé COPY (SELECT ..) TO .. données contraintes dans une base de données "template" et utilisé CREATE DATABASE test_run_XX TEMPLATE product_snapshot_XX. Bien sûr, j'ai réduit les données au strict minimum pour que l'instantané du produit soit chargé et que les opérations de création de tests de base de données soient suffisamment rapides pour ne pas constituer un obstacle pour l'équipe. – Trey
Y at-il un moyen de rendre ce travail si vous avez plusieurs tables jointes dont vous voulez des instantanés? COPY FROM ne prend pas en charge l'importation de plusieurs tables. – mlissner
Merci @Ben, c'est vraiment utile :) –