【问题标题】:Pg_restore gives no errors in terminal, but doesn't seem to change anythingPg_restore 在终端中没有给出错误,但似乎没有改变任何东西
【发布时间】:2014-12-04 17:46:24
【问题描述】:

在为测试目的创建新数据库时,我在使用 pg_restore 时遇到问题。

我做了什么:

  • 我从我的日常备份中获取了使用pg_dump oldDB -f /some/directory/oldDUMP.dmp 创建的转储文件

  • 我已登录到 postgres 用户并使用 createdb -T template0 newDB 创建了新数据库

  • 然后我尝试使用(在包含我的 oldDUMP.dmp 文件的文件夹中)pg_restore -d newDB oldDUMP.dmp 但输出告诉我,由于转储在 txt 中,所以我应该登录到 psql

  • 我以 postgres (psql) 身份登录并再次输入 pg_restore -d newDB oldDUMP.dmp。什么都没有显示(似乎有效),但没有区别 - 测试数据库仍然是空的。

我尝试从其他用户那里做同样的事情,并尝试将 psql 登录到 newDB(据我了解,唯一的 psql 命令登录到 postgres 因为我在 Linux 上登录为 postgres)但仍然没有差异。对于一些可能存在错误的日志,我不确定在哪里寻找。 我一直担心我以某种方式覆盖了一些旧数据库,但我怀疑这是可能的。

知道我做错了什么吗? 我是 Postgresql/psql(和 Linux)的新手,所以这可能是一些非常基本的问题,但我无法在 Web 中找到这样的问题。

【问题讨论】:

    标签: postgresql psql


    【解决方案1】:

    但是输出告诉我,既然dump是在txt中,那么我应该登录到psql

    您需要将脚本作为输入提供给 psql。像这样的:

    psql < oldDUMP.dmp
    

    我以 postgres (psql) 身份登录并再次键入 pg_restore -d newDB oldDUMP.dmp。什么都没有出现(似乎有效),但没有区别

    您是否在 psql 提示符中输入了pg_restore?那是错误的地方。 pg_restore 是一个程序,而不是 SQL 语句。没有发生任何事情的原因可能是因为您忘记使用; 终止语句 - 如果您这样做,您将收到 SQL 语法错误。

    【讨论】:

    • 有道理。对我有用的确切命令是:psql &lt; oldDUMP.dmp newDB 当然,据我所知,如果我在终端中登录到 newDB 用户,没有 newDB 的命令会起作用。无论如何,再次感谢您的帮助。不知道为什么当我尝试在 psql 提示符中使用 pg_restore 时输出没有错误。
    • @hisu:就像我说的:如果你忘记了最后的; psql 只会等你完成语句。
    • 啊,好的,我现在明白了。错过了。感谢您的回答。
    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多