用于测试的最小postgres实例

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

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

提问于
用户回答回答于

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

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

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

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

所有你需要的是initdbpg_ctl上的PATH,和一个辅助类来管理服务器。

用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券