1. ホーム
  2. postgresql

[解決済み] PostgreSQLをメモリのみで動作させる

2022-06-04 20:07:04

質問

私は、私が書いたユニットテストごとに、メモリ上だけで動作する小さなPostgreSQLデータベースを実行したいと思っています。例えば

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

理想的には、ユニットテストが使用する1つのpostgresの実行ファイルをバージョンコントロールにチェックインすることです。

次のようなものです。 HSQL のようなものですが、postgresのためのものです。どうすればいいのでしょうか?

そのような Postgres のバージョンをどこで手に入れることができるのでしょうか?どのように私はディスクを使用しないように指示することができますか?

どのように解決するのですか?

これはPostgresでは不可能です。HSQLDBやMySQLのようなインプロセス/インメモリエンジンを提供していないのです。

自己充足的な環境を作りたいのであれば ができます。 はPostgresのバイナリをSVNに置くことができます(ただし、単一の実行ファイル以上のものです)。

を実行する必要があります。 initdb を実行してテスト用データベースをセットアップする必要があります。これはバッチファイルから、あるいはRuntime.exec()を使って行うことができます。しかし、initdbは高速なものではないことに注意してください。テストのたびに initdb を実行したいとは思わないでしょう。しかし、テストスイートの前にこれを実行することは可能かもしれません。

しかし、これは可能ですが、テストを実行する前にテストデータベースを単純に再作成する専用のPostgresインストールを持つことをお勧めします。

テンプレートデータベースを使用することでテストデータベースを再作成することができ、非常に高速に作成することができます (a ロット 各テスト実行のために initdb を実行するよりも速い)