159 votes

Exécution de PostgreSQL en mémoire uniquement

Je veux exécuter une petite base de données PostgreSQL qui fonctionne uniquement en mémoire, pour chaque test unitaire que j'écris. Par exemple :

@Before
void setUp() {
    String port = runPostgresOnRandomPort();
    connectTo("postgres://localhost:"+port+"/in_memory_db");
    // ...
}

Idéalement, j'aurai un seul exécutable postgres enregistré dans le contrôle de version, que le test unitaire utilisera.

Quelque chose comme HSQL mais pour postgres. Comment puis-je le faire ?

Où puis-je obtenir une telle version de Postgres ? Comment puis-je lui demander de ne pas utiliser le disque ?

11voto

Olivier Points 2277

Si vous utilisez NodeJS, vous pouvez utiliser pg-mem (disclaimer : je suis l'auteur) pour émuler les caractéristiques les plus communes d'un db postgres.

Vous disposerez d'une base de données entièrement en mémoire, isolée et indépendante de la plate-forme, qui reproduira le comportement de PG (elle pourra même fonctionne dans les navigateurs ).

J'ai écrit un article pour montrer comment l'utiliser pour vos tests unitaires ici .

9voto

akvyalkov Points 111

Il existe désormais une version en mémoire de PostgreSQL proposée par la société de recherche russe Yandex : https://github.com/yandex-qatools/postgresql-embedded

Il est basé sur le processus d'intégration de Flapdoodle OSS.

Exemple d'utilisation (à partir de la page github) :

// starting Postgres
final EmbeddedPostgres postgres = new EmbeddedPostgres(V9_6);
// predefined data directory
// final EmbeddedPostgres postgres = new EmbeddedPostgres(V9_6, "/path/to/predefined/data/directory");
final String url = postgres.start("localhost", 5432, "dbName", "userName", "password");

// connecting to a running Postgres and feeding up the database
final Connection conn = DriverManager.getConnection(url);
conn.createStatement().execute("CREATE TABLE films (code char(5));");

Je l'utilise depuis quelque temps. Il fonctionne bien.

MISE À JOUR ce projet n'est plus activement maintenu

Please be adviced that the main maintainer of this project has successfuly 
migrated to the use of Test Containers project. This is the best possible 
alternative nowadays.

7voto

Hichem MAALMI Points 1

Si vous pouvez utiliser docker, vous pouvez monter le répertoire de données postgresql en mémoire pour les tests.

docker run --tmpfs=/data -e PGDATA=/data postgres

3voto

gerty3000 Points 1122

Vous pouvez également utiliser les paramètres de configuration de PostgreSQL (tels que ceux détaillés dans la question et la réponse acceptée ici ) pour obtenir des performances sans nécessairement recourir à une base de données en mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X