【问题标题】:Printing to the screen in a .sql file in PostgreSQL在 .sql 文件 postgres 中打印到屏幕
【发布时间】:2013-06-27 07:26:33
【问题描述】:

这听起来应该是一件很容易的事情,但是,我找不到任何方法。

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

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

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

insert into X...

我想看类似的,

开始插入表 X

已完成插入表 X

这在 Postgres 中可行吗?

【问题讨论】:

标签: postgresql postgresql-9.1


【解决方案1】:

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

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

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

【讨论】:

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

可能有更好的方法来做到这一点。但是如果你需要使用 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";

【讨论】:

    【解决方案3】:

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

    你可以运行 psql--echo-all:

    -a
    --echo-all
    将所有输入行打印到标准输出 被阅读。这对于脚本处理比交互式更有用 模式。这相当于将变量ECHO 设置为all

    这和其他“回显这种类型的所有内容”选项(请参阅the manual)可能太吵了。如果您只想手动打印,请使用\echo

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

    所以你可以说:

    \echo 'Starting to insert into table X'
    -- big pile of inserts go here...
    \echo 'Finished inserting into table X'
    

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2012-03-08
      • 2012-02-15
      • 1970-01-01
      相关资源
      最近更新 更多