web-dev-qa-db-fra.com

Équivalent PostgreSQL des tables mémoire MySQL?

PostgreSQL a-t-il un équivalent de MySQL tables mémoire ?

Ces tables de mémoire MySQL peuvent persister entre les sessions (c'est-à-dire différentes des tables temporaires qui tombent à la fin de la session). Je n'ai rien trouvé avec PostgreSQL qui puisse faire la même chose.

34
Elliot B.

Non, pour le moment, ils n'existent pas dans PostgreSQL. Si vous avez vraiment besoin d'une table mémoire, vous pouvez créer un disque RAM, ajouter un tablespace pour cela, et créer des tables dessus).

Si vous n'avez besoin que de la table temporaire visible entre différentes sessions, vous pouvez utiliser une table UNLOGGED . Ce ne sont pas de vraies tables de mémoire, mais elles se comporteront de manière surprenante de la même manière lorsque les données de la table sont nettement plus petites que la RAM du système.

Les tables temporaires globales seraient une autre option mais ne sont pas prises en charge dans PostgreSQL à partir de 9.2 (voir commentaires).

39
aleroot

Répondre à une question vieille de quatre ans, mais comme elle vient en tête des résultats de recherche Google même maintenant.

Il n'y a aucun moyen intégré de mettre en cache une table complète en mémoire, mais il existe une extension qui peut le faire.

In Memory Column Store est une bibliothèque qui agit comme une extension d'extension et également comme un moteur de stockage et d'exécution en colonnes. Vous pouvez consulter ici pour la documentation. Il existe une fonction de chargement que vous pouvez utiliser pour charger la table entière en mémoire.

L'avantage est que la table est stockée dans postgres shared_buffers, donc lors de l'exécution d'une requête, postgres détecte immédiatement que les pages sont en mémoire et récupère à partir de là.

L'inconvénient est que shared_buffers n'est pas vraiment conçu pour fonctionner de cette manière et des instabilités peuvent se produire (généralement pas), mais vous pouvez probablement avoir cela dans un cluster/machine secondaire avec cette configuration juste pour être sûr.

Toutes les autres mises en garde habituelles concernant les postgres et les shared_buffers s'appliquent toujours.

14
Madusudanan