9

JDBCを介してpostgresデータベースと対話するコードがいくつかあります。ただし、テストの目的で、グローバルなpostgresのインストールを変更したり、ユーザーを管理したりすることなく、新しいデータベースをすばやく作成して接続したいだけです。一般的に、この種のテストはどのように行われますか。

4

4 に答える 4

8

実行可能ファイルを見つけて、initdbそれを使用して、現在のユーザーが書き込み可能な新しいデータベース インスタンスの一時ストレージを作成します。これはテスト インスタンスであるinitdb --auth=trust --username=postgres -D /path/to/temp/datadirため、パスワードを必要とせずに接続を受け入れるように新しいデータベースが設定されるように、次のようなものを使用します。

サーバーを起動するために使用pg_ctlし、ポートを指定して、生成されたデフォルトの設定をオーバーライドし、postgresql.conf競合を回避します。

新しいデータベース クラスターに接続し、必要な作業を行います。テスト コードに制御を渡す前にpostgres、最初にユーザーとして接続し、必要なコマンドを実行する必要がCREATE USERあります。CREATE DATABASE

最後に、 を使用pg_ctlして停止し、最後にデータ ディレクトリを削除します。

必要なのはinitdbpg_ctl上のPATHと、サーバーを管理するためのヘルパー クラスだけです。

見る:

于 2012-12-07T23:40:22.780 に答える
7

テスト用に Postgres の一時インスタンスを簡単に作成できるライブラリがいくつかあります。

これらはすべて、一時データベースを自動的にシャットダウンして削除するように設計されています。これはpg_tmp(1)、Java から最小限の Postgres インスタンスを作成するために使用する方法です。

import java.io.*;
import java.sql.*;

public class test_pg
{
    public static void main(String args[])
    {
        try {
            Process p = Runtime.getRuntime().exec("pg_tmp -t");
            BufferedReader input = new BufferedReader
                    (new InputStreamReader(p.getInputStream()));
            String pg_uri = "jdbc:" + input.readLine();
            input.close();
            System.out.println("Using " + pg_uri);
            Connection conn = DriverManager.getConnection(pg_uri);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select now()");
            while(rs.next()) {
                System.out.print(rs.getString(1));
            }
        } catch(IOException | SQLException e) {
            e.printStackTrace();
        }
    }
}
于 2014-07-07T20:24:48.297 に答える
0

ホーム ディレクトリに Postgres のインスタンスをインストールし、別のポートでユーザーの下で実行できます。たとえば、ここを参照してください。

http://www.bacula.org/manuals/en/catalog/catalog/Installi_Configur_PostgreS.html

コードの内容によっては、Heroku でコードをテストすることもできます。小さな仮想 Postgres データベースが無料で提供されます。

于 2012-12-07T22:29:05.450 に答える