向 PSQL 命令行提供 SQL 查询的方法
Ways to give SQL Query to PSQL Command line
我正在寻找除 -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);'";
以下 select 查询有效:
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 命令?
Are there any other ways to give the Alter SQL queries to the PSQL command?
您可以通过 STDIN 传递查询。
Then why does the Alter query does not work?
不能肯定地说,但对我来说,您似乎缺少传递给 bash
:
的 -c
参数的引号
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 };
您正在构建的命令将是:
bash -c psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'
什么时候应该是:
bash -c "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'"
但为什么要传递给 bash
?为什么不简单地执行这个?
psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'
或者更好,执行它并通过 STDIN 传递查询:
String query = "ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000)";
String command[] = new String[] { "psql", "--dbname=postgresql://postgres:password@127.0.0.1:1234/db123" };
Exec exec = new Exec();
Process exec2 = exec.exec(namespace, podName, command, dbContainerName, query, stdOut);
Thread.sleep(10000);
exec2.destroy();
问题出在 ;
对于任何正在看这个问题的人,请不要考虑这个 kubernetes api;作为 EOF,因此无法找到匹配的引用。
我删除了;及其工作原理。
我正在寻找除 -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);'";
以下 select 查询有效:
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 命令?
Are there any other ways to give the Alter SQL queries to the PSQL command?
您可以通过 STDIN 传递查询。
Then why does the Alter query does not work?
不能肯定地说,但对我来说,您似乎缺少传递给 bash
:
-c
参数的引号
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 };
您正在构建的命令将是:
bash -c psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'
什么时候应该是:
bash -c "psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'"
但为什么要传递给 bash
?为什么不简单地执行这个?
psql --dbname=postgresql://postgres:password@127.0.0.1:1234/db123 -c 'ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000);'
或者更好,执行它并通过 STDIN 传递查询:
String query = "ALTER TABLE audit ALTER COLUMN event TYPE character varying(3000)";
String command[] = new String[] { "psql", "--dbname=postgresql://postgres:password@127.0.0.1:1234/db123" };
Exec exec = new Exec();
Process exec2 = exec.exec(namespace, podName, command, dbContainerName, query, stdOut);
Thread.sleep(10000);
exec2.destroy();
问题出在 ;
对于任何正在看这个问题的人,请不要考虑这个 kubernetes api;作为 EOF,因此无法找到匹配的引用。
我删除了;及其工作原理。