如何在 SQL 中打印到控制台?

aay*_*gra 7 postgresql

我正在使用PostgreSQL并且我想向控制台打印一条消息。

如果我用plpythonu我用plpy.notice 如果我用plpgsql我用raise notice

但是当函数是纯函数时如何打印SQL?using 对SELECT 'string'我没有帮助,因为它将字符串打印在一列中,如果消息位于代码中间,则不会显示它。我想要类似raise notice/ plpy.noticefor 的东西SQL

CREATE OR REPLACE FUNCTION A()
  RETURNS VOID AS
$BODY$ 
                how do i print 'hello world' here?
 $BODY$
  LANGUAGE sql VOLATILE
Run Code Online (Sandbox Code Playgroud)

如果是 plpgsql 我会这样做:

CREATE OR REPLACE FUNCTION A()
  RETURNS VOID AS
$BODY$ 
        Raise Notice 'hello world'
 $BODY$
  LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

我正在寻找等效的 LANGUAGE SQL

Jam*_*own 9

有了psql你可以\echo text(或者\qecho如果使用\o),例如与执行psql -f与内容的文件:

select 'Straight';
\echo BETWEEN
select 'the lines.';
Run Code Online (Sandbox Code Playgroud)

输出:

 ?column? 
----------
 Straight
(1 row)

BETWEEN
  ?column?  
------------
 the lines.
(1 row)
Run Code Online (Sandbox Code Playgroud)


Dan*_*ité 7

为什么不直接从 SQL 函数内部调用引发通知的 plpgsql 函数呢?

根据文档:

SQL 函数执行任意 SQL 语句列表,返回列表中最后一个查询的结果

因此可以在不改变结果的情况下在开头插入 SELECT 语句。

create function print(text) returns void as 
$$ begin raise notice '%', $1; end 
$$ language plpgsql; 

create function whatever(int) returns int as $$
  select print('foobar');
  select $1;
 $$ language sql;

select whatever(3);
NOTICE:  foobar
CONTEXT:  SQL function "whatever" statement 1
 whatever 
----------
        3
(1 row)
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以从 psql 执行 bash 命令。例如:

\! echo "HERE YOUR DEBUG MSG!"
select * from your_table;
Run Code Online (Sandbox Code Playgroud)