使用 Postgres JDBC 恢复数据库中的 postgres 备份数据(数据库名称包含空格)
Posted
技术标签:
【中文标题】使用 Postgres JDBC 恢复数据库中的 postgres 备份数据(数据库名称包含空格)【英文标题】:Restore postgres Backup Data in DB (DB name contain spaces) using Postgres JDBC 【发布时间】: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[])
是的,用于执行恢复的命令保证正确
【参考方案1】:
尝试引用您的数据库名称如下:'"databasename"'
所以java变量应该是这样的:
String databaseName = "'\"abc abc\"'";
【讨论】:
我刚刚尝试了您的评论,但没有成功。你对我还有什么建议吗?谢谢 你能从psql客户端执行sql命令:select * from pg_catalog.pg_database;
或\l+
吗?我确定该数据库存在,但 UI 工具无法显示它
是的,如果我在窗口命令行中执行此命令,通过使用引号 \" 来包装数据库名称,它可以完美地工作,但它不适用于 java,我不知道如何:(
你为什么用and单引号和双引号?选择一个
我尝试了单引号或双引号或将它们结合起来但没有工作@Mark Rotteveel以上是关于使用 Postgres JDBC 恢复数据库中的 postgres 备份数据(数据库名称包含空格)的主要内容,如果未能解决你的问题,请参考以下文章
IntegrityError:postgres 从转储恢复后,所有具有 ForeignKey 的模型/字段的“id”列中的空值
Android 无法直接连接 Postgres 数据库,也无法使用 JDBC 连接
如何通过 Spark 中的 jdbc 连接到 docker 托管的 postgresql 数据库?