use*_*042 9 java testing postgresql jdbc
我有一些代码通过JDBC与postgres数据库交互.但是,出于测试目的,我只想快速创建一个新数据库并连接到它,而无需修改我的全局postgres安装,管理用户等.人们通常如何进行这种测试?
我找到了initdb可执行文件并使用它来创建当前用户可写的新数据库实例临时存储.因为它是一个测试实例,initdb --auth=trust --username=postgres -D /path/to/temp/datadir所以使用类似的东西设置新数据库以接受连接而不需要密码.
使用pg_ctl启动服务器,指定端口来替代默认的设置产生postgresql.conf和避免冲突.
连接到新的数据库集群并执行所需的任何工作.您将要连接的用户postgres的任何需要的第一和运行CREATE USER,并CREATE DATABASE命令移交控制权交给你的测试代码之前.
最后,用pg_ctl它来停止它,最后删除数据目录.
所有你需要的是initdb和pg_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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在主目录中安装一个 Postgres 实例,在不同的端口上并在您的用户下运行。参见这里的例子:
http://www.bacula.org/manuals/en/catalog/catalog/Installi_Configur_PostgreS.html
您还可以在 Heroku 上测试您的代码,具体取决于它是什么。他们免费为您提供一个小型虚拟 Postgres 数据库。