如何从Java程序向psql提供SQL脚本?
我需要向Postgres数据库提供一个SQL脚本。我正在创建一个如何从Java程序向psql提供SQL脚本?,java,postgresql,psql,Java,Postgresql,Psql,我需要向Postgres数据库提供一个SQL脚本。我正在创建一个进程实例,该实例以脚本路径为参数执行psql。守则的核心: public static void main(final String[] args) { ProcessBuilder pb = new ProcessBuilder("psql", "-d base", "-U user", "-f path/new_schema.sql"); Map<String, String> env = pb.e
进程
实例,该实例以脚本路径为参数执行psql
。守则的核心:
public static void main(final String[] args)
{
ProcessBuilder pb = new ProcessBuilder("psql", "-d base", "-U user", "-f path/new_schema.sql");
Map<String, String> env = pb.environment();
env.put("PGPASSWORD", "pass");
pb.redirectErrorStream(true);
try
{
Process p = pb.start();
InputStream stdout = p.getInputStream ();
BufferedReader reader = new BufferedReader (new InputStreamReader(stdout));
String line;
while ((line = reader.readLine ()) != null)
{
System.out.println ("Stdout: " + line);
}
}
catch (Exception ex)
{
System.out.println("Something went wrong: " + ex.getMessage());
}
}
然后在启动流程之前添加一个新的环境变量
实例:
env.put("PGPASSFILE", "/home/user/.pgpass");
尽管如此,我还是收到了“身份验证失败”消息
.pgpass
文件具有正确的权限(0600
),如果我直接从shell调用psql
,则该文件正在执行其工作
我错过了什么
env.put("PGPASSFILE", "/home/user/.pgpass");