【发布时间】:2019-09-09 18:39:11
【问题描述】:
我正在寻找除 -c 或 --command= 以外的不同方式来向 PSQL 命令行提供 SQL 查询。
有什么替代方法:
String command2 = "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'";
以下选择查询有效:
String command2 = "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'SELECT * FROM audit'";
那为什么Alter查询不起作用呢?
如果需要一些背景:
我在 Java 中使用 io.kubernetes 库。我想用 postgres 在容器上执行 psql 命令。
以下不起作用:
String command2 = "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'";
String command[] = new String[] { "bash", "-c", command2 };
Exec exec = new Exec();
Process exec2 = exec.exec(namespace, podName, command, dbContainerName, stdIn, stdOut);
Thread.sleep(10000);
exec2.destroy();
在输入流中,我收到以下错误:
bash: -c: line 0: unexpected EOF while looking for matching `''
当我在 kubernetes 命令行中使用相同的 sql 查询时,它可以工作:
kubectl exec -it pod -c container -- bash -c "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'"
那为什么 Exec through java 库不起作用呢?
还有其他方法可以将 Alter SQL 查询赋予 PSQL 命令吗?
【问题讨论】:
-
不能使用JDBC有什么原因吗?
标签: java bash postgresql psql