Comment empêcher la journalisation en écriture anticipée sur une seule table dans PostgreSQL ?

StackOverflow https://stackoverflow.com/questions/38090

  •  09-06-2019
  •  | 
  •  

Question

J'envisage l'envoi de journaux de Journaux d'écriture anticipée (WAL) dans PostgreSQL pour créer une base de données de secours.Cependant, j'ai une table dans la base de données qui reçoit une énorme quantité d'INSERT/DELETE chaque jour, mais dont je ne me soucie pas de protéger les données qu'elle contient.Pour réduire la quantité de WAL produits, je me demandais, existe-t-il un moyen d'empêcher l'enregistrement de toute activité sur une table dans les WAL ?

Était-ce utile?

La solution

Malheureusement, je ne crois pas que ce soit le cas.La journalisation WAL fonctionne au niveau de la page, qui est bien inférieur au niveau de la table et ne sait même pas quelle page contient les données de quelle table.En fait, les fichiers WAL ne savent même pas à quelles pages appartiennent quelles pages. base de données.

Vous pourriez envisager de déplacer votre table à haute activité vers une instance complètement différente de PostgreSQL.Cela semble drastique, mais je ne vois pas d'autre moyen d'éviter que cette activité apparaisse dans vos fichiers WAL.

Autres conseils

J'ai rencontré cette vieille question, qui a maintenant une meilleure réponse.Postgres 9.1 a introduit les « Tables non enregistrées », qui sont des tables qui n'enregistrent pas leurs modifications DML dans WAL.Consultez la documentation pour plus d'informations, mais au moins il existe désormais une solution à ce problème.

Voir En attente de la version 9.1 - Tables NON ENREGISTRÉES par depesz, et le Documents 9.1.

Pour offrir une option à ma propre question.Il y a tables temporaires - "les tables temporaires sont automatiquement supprimées à la fin d'une session, ou éventuellement à la fin de la transaction en cours (voir ON COMMIT ci-dessous)" - ce qui, je pense, ne génère pas de WAL.Même ainsi, cela n'est peut-être pas idéal car la création et la conception de la table devront être dans le code.

je considérerais memcaché pour des cas d'utilisation comme celui-ci.Vous pouvez même répartir la charge sur plusieurs machines bon marché.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top