有没有像“psql --quiet”一样的“pg_restore --quiet”选项?

39

psql有一个-q/--quiet选项(环境变量QUIET),而pg_restore没有安静的选项。是否有办法让pg_restore不会详细显示它正在执行的SQL命令?

# e.g., here's the verbose output that I don't want to see:
$ pg_restore --cluster 8.4/mycluster mycluster.dump
---- PostgreSQL database dump
--
SET statement_timeout = 0;SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;SET check_function_bodies = false;
...
--
-- Name: data_src; Type: TABLE; Schema: public; Owner: postgres; Tablespace:--
CREATE TABLE data_src (
...

1
为什么不直接将输出重定向到/dev/null - user330315
我不想将输出重定向到 /dev/null,因为我不想丢失任何潜在的错误消息。它们可能会被发送到 stderr,所以我可以将 stdout 重定向到 /dev/null,但我更喜欢像 --quiet 这样的东西。我不介意看到一些信息输出,但不是每个 SQL 命令。 - Rob Bednark
2个回答

75
这个问题似乎意味着pg_restore正在执行这些SQL命令,而你不想在输出中看到它们。但是,只有输出它们才是它的唯一目的。 pg_restore有两种操作模式,带连接到数据库和不带连接到数据库。当它没有连接到数据库(如问题中所示的-d选项)时: $ pg_restore --cluster 8.4/mycluster mycluster.dump 那么它的唯一目的就是以纯文本形式输出一组SQL命令,应该将这些SQL命令提供给一个SQL解释器来还原数据库。这些SQL命令构成了一个连贯的集合,没有任何冗余内容,并且它们 不会由pg_restore本身执行。它们通常被重定向到一个文件中以供稍后执行,或者被传送到psql进行即时执行。

8
啊哈,现在一切都清楚了!我错误地认为如果没有使用-d参数,pg_restore会自动为我创建数据库。但是通过你的解释和阅读pg_restore(1)手册,现在我明白了。我的问题是基于错误的假设,所以我会考虑如何重新措辞以使它更清晰易懂,方便未来的读者。谢谢@Daniel_Vérité! - Rob Bednark

1
您可以将标准输出重定向到文件中:

pg_restore --cluster 8.4/mycluster mycluster.dump > pg_restore.log

或者提供 -d 选项,但你需要的是 -f-d

pg_restore -f pg_restore.sql --cluster 8.4/mycluster mycluster.dump
pg_restore -d yourdatabase --cluster 8.4/mycluster mycluster.dump

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接