41

这听起来应该是一件非常容易的事情,但是,我无法在任何地方找到如何去做。

我正在构建一个 .sql 文件,用于升级我的应用程序,该应用程序会更改表、插入/更新等。

我想在每个命令完成后写入屏幕。

所以,例如,如果我有类似的东西:

insert into X...

我想看到类似的东西,

开始插入表 X

完成插入表 X

这在 Postgres 中可能吗?

4

3 回答 3

63

如果您只是提供一大堆 SQL,psql那么您有几个选择。

你可以psql运行--echo-all

-a
--echo-all
在读取所有输入行时将它们打印到标准输出。这对于脚本处理比交互模式更有用。这相当于将变量设置ECHOall

那个和其他“回显这种类型的所有东西”选项(参见手册)可能太吵了。如果您只想手动打印,请使用\echo

\echo text[ ... ]
将参数打印到标准输出,用一个空格分隔,后跟一个换行符。这对于在脚本输出中散布信息很有用。

所以你可以说:

\echo 'Starting to insert into table X'
-- big pile of inserts go here...
\echo 'Finished inserting into table X'
于 2013-06-29T18:03:33.647 回答
9

可能有更好的方法来做到这一点。但是如果你需要使用 vanilla SQL,试试这个:

SELECT NULL AS "Starting to insert into table X";
-- big pile of inserts go here...
SELECT NULL AS "Finished inserting into table X";
于 2015-11-19T17:49:14.713 回答
7

通过:https ://stackoverflow.com/a/18828523/2014857

DO language plpgsql $$
BEGIN
  RAISE NOTICE 'hello, world!';
END
$$;

根据你在做什么,我会担心做一堆匿名代码块。您可能会考虑将上述内容存储为函数,并传入您想要记录的任何值。

于 2015-11-23T16:27:39.653 回答