用于测试的最小postgres实例

use*_*042 9 java testing postgresql jdbc

我有一些代码通过JDBC与postgres数据库交互.但是,出于测试目的,我只想快速创建一个新数据库并连接到它,而无需修改我的全局postgres安装,管理用户等.人们通常如何进行这种测试?

Cra*_*ger 7

我找到了initdb可执行文件并使用它来创建当前用户可写的新数据库实例临时存储.因为它是一个测试实例,initdb --auth=trust --username=postgres -D /path/to/temp/datadir所以使用类似的东西设置新数据库以接受连接而不需要密码.

使用pg_ctl启动服务器,指定端口来替代默认的设置产生postgresql.conf和避免冲突.

连接到新的数据库集群并执行所需的任何工作.您将要连接的用户postgres的任何需要的第一和运行CREATE USER,并CREATE DATABASE命令移交控制权交给你的测试代码之前.

最后,用pg_ctl它来停止它,最后删除数据目录.

所有你需要的是initdbpg_ctlPATH,和一个辅助类来管理服务器.

看到:


era*_*man 6

有几个库可以创建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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Die*_*sch 0

您可以在主目录中安装一个 Postgres 实例,在不同的端口上并在您的用户下运行。参见这里的例子:

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

您还可以在 Heroku 上测试您的代码,具体取决于它是什么。他们免费为您提供一个小型虚拟 Postgres 数据库。