【问题标题】:Restore postgres Backup Data in DB (DB name contain spaces) using Postgres JDBC使用 Postgres JDBC 恢复数据库中的 postgres 备份数据(数据库名称包含空格)
【发布时间】:2020-11-24 10:23:19
【问题描述】:

我们正在尝试将备份文件恢复到数据库名称包含空格的 postgres 数据库。例如:“abbb abc”、“dqweqwe fdf fsdf”、... 但是在恢复未显示在该数据库名称中的数据后(由 pgAdmin 工具检查)。 以下是我们的备份恢复 java 命令:

   String host = "localhost";
   String port = "5432";
   String databaseName = "abc    abc    "; 
   String user = "postgres";
   String backupFilePath= "C:\Users\Sun\Desktop\backup.backup";

   final String RESTORE_COMMAND = "pg_restore -c -h %s -p %s -U %s -d %s -v %s";
   String cmd = String.format(RESTORE_COMMAND, host, port, user, databaseName, backupFilePath);
   // Execute commands by  Runtime.getRuntime().exec(cmd )
   excuteCommand(cmd);

我们尝试使用一些转义字符串,如 "" 或 '' 或 [] ,甚至用 \ 替换 databaseName 中的空格,但它还没有奏效。 这些对我们来说有什么建议吗?请帮忙,非常感谢。

【问题讨论】:

  • 您可能需要考虑使用正确填充的字符串数组而不是 Runtime.exec(String) 调用 Runtime.getRuntime().exec(String[])
  • 是的,用于执行恢复的命令保证正确

标签: java postgresql jdbc


【解决方案1】:

尝试引用您的数据库名称如下:'"databasename"' 所以java变量应该是这样的:

   String databaseName = "'\"abc    abc\"'";

【讨论】:

  • 我刚刚尝试了您的评论,但没有成功。你对我还有什么建议吗?谢谢
  • 你能从psql客户端执行sql命令:select * from pg_catalog.pg_database;\l+吗?我确定该数据库存在,但 UI 工具无法显示它
  • 是的,如果我在窗口命令行中执行此命令,通过使用引号 \" 来包装数据库名称,它可以完美地工作,但它不适用于 java,我不知道如何:(
  • 你为什么用and单引号和双引号?选择一个
  • 我尝试了单引号或双引号或将它们结合起来但没有工作@Mark Rotteveel
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 2021-12-08
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2018-01-01
  • 1970-01-01
相关资源
最近更新 更多