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

How to print to console in SQL?

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

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

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

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

如果是 plpgsql 我会这样做:

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

我正在寻找 LANGUAGE SQL

中的等效项

你只能select它在SQL

db=# CREATE FUNCTION b() RETURNS text AS                                                                                                                                         
$BODY$                                                                                                                                                                            
select 'Hello there'::text;                                                                                                                                                     
$BODY$                                                                                                                                                                          
 LANGUAGE sql VOLATILE;
CREATE FUNCTION
db=# select b()::text;                                                                                                                                                                
b
-------------
 Hello there
(1 row)

在普通的 SQL 中有 NOTIFY 命令。该命令将 payload 发送到 channelchannelpayload 可以是任何字符串。

CREATE OR REPLACE FUNCTION A() RETURNS void AS $BODY$ 
  NOTIFY msg, 'hello world';
$BODY$ LANGUAGE sql;

然后:

LISTEN msg;
SELECT A();

Asynchronous notification "msg" with payload "hello world" received from server process with PID 3275.

UNLISTEN msg;

该消息还将包含一些有关其来源的信息。如果你真的只想要字符串(有效负载),那么你必须从完整的字符串中解析出来。