在.sql文件postgres中打印到屏幕

El *_*apo 31 postgresql postgresql-9.1

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

我有一个.sql文件,我正在构建升级到我的应用程序,改变表,插入/更新等.

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

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

insert into X...
Run Code Online (Sandbox Code Playgroud)

我想看到类似的东西,

开始插入表X.

完成插入表X

这在Postgres有可能吗?

mu *_*ort 45

如果您只是在提供一大堆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'
Run Code Online (Sandbox Code Playgroud)

  • 只是明确指出,要将变量“ECHO”设置为“all”,您可以**将其添加到脚本中(通常在脚本顶部完成):“\set ECHO all”,* *或** 使用“psql --echo-all”运行脚本。 (2认同)

Fur*_*der 6

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

DO language plpgsql $$
BEGIN
  RAISE NOTICE 'hello, world!';
END
$$;
Run Code Online (Sandbox Code Playgroud)

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

  • RAISE NOTICE 似乎是一个耗时的声明。我处理 140K 记录表的函数需要 25 分钟,每条记录有 10 条 RAISE NOTICE 语句。我删除了所有 RAISE NOTICE 语句,对于同一组记录,现在需要 25 秒。所以在使用时要小心。 (2认同)

sha*_*rey 5

可能有更好的方法。但是,如果您需要使用原始SQL,请尝试以下操作:

SELECT NULL AS "Starting to insert into table X";
-- big pile of inserts go here...
SELECT NULL AS "Finished inserting into table X";
Run Code Online (Sandbox Code Playgroud)