PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Optimisation » Maitenance vacuum reindex » 09/05/2023 13:59:35

Pour réindexer des index sans avoir de fenêtre de maintenance, vous pouvez utiliser une technique appelée "index swapping". Cette technique consiste à créer un nouvel index en arrière-plan, à renommer l'ancien index avec un nom temporaire, puis à renommer le nouvel index avec le nom de l'ancien index. De cette manière, les requêtes en cours ne sont pas perturbées, car elles continuent d'utiliser l'ancien index jusqu'à ce que la renommée soit terminée.

Voici les étapes à suivre pour utiliser cette technique:

1) Créez un nouvel index sur la même colonne que l'index à réindexer. Vous pouvez créer cet index en arrière-plan en ajoutant l'option CONCURRENTLY à la commande CREATE INDEX.
2) Renommez l'ancien index en utilisant une commande ALTER INDEX pour lui donner un nom temporaire. Par exemple, vous pouvez le renommer en "nom_de_l_index_temp".
3) Renommez le nouvel index créé à l'étape 1 en utilisant une commande ALTER INDEX pour lui donner le nom de l'ancien index. Par exemple, vous pouvez le renommer en "nom_de_l_index".
4) Supprimez l'index temporaire créé à l'étape 2.

Cela devrait vous permettre de réindexer vos index sans perturber les transactions en cours.

En ce qui concerne la récupération des transactions avortées lors de la réindexation, il n'y a malheureusement pas de solution fiable à 100%. Vous pouvez utiliser la table pg_stat_activity pour trouver les transactions en cours et essayer de les récupérer en exécutant la même commande après la réindexation. Cependant, certaines transactions peuvent être perdues de cette manière.

#2 Re : Général » Restauration table par table et contraintes externes » 09/05/2023 13:54:13

Salut, j'ai déjà eu besoin de faire quelque chose comme ça, donc voilà ma méthode, j'espère que ça marchera pour vous

Restaurer des tables spécifiques sans toucher aux autres tables peut être délicat, surtout si vous avez des contraintes externes telles que des clés étrangères. Cependant, il existe une méthode pour y parvenir.

Tout d'abord, vous pouvez utiliser la commande pg_dump pour extraire uniquement les tables que vous souhaitez restaurer. Par exemple, vous pouvez utiliser la commande suivante pour extraire la table nommée ma_table_à_restaurer :

pg_dump -t ma_table_à_restaurer ma_base > ma_table_à_restaurer.dump

Ensuite, vous pouvez restaurer la table en utilisant la commande suivante :

pg_restore -v -p 5440 -d ma_base -t ma_table_à_restaurer ma_table_à_restaurer.dump

Notez que vous n'avez pas besoin de l'option --data-only car vous ne restaurez qu'une seule table.

Enfin, si vous rencontrez toujours des erreurs de violation de contrainte, vous pouvez essayer de désactiver temporairement la contrainte avec la commande ALTER TABLE et SET CONSTRAINTS. Cependant, assurez-vous de réactiver la contrainte une fois que vous avez restauré toutes les tables nécessaires.

J'espère que cela vous aidera à résoudre votre problème !

Pied de page des forums

Propulsé par FluxBB