使用 DBeaver 在 Postgresql 函数中打印带有结果集的准备好的动态查询

Print prepared dynamic query with result set in Postgresql function using DBeaver

我有一个函数,我在其中准备了动态查询,我想在执行它之前在输出 window 中打印它。

注意:在下面的示例中,我只是添加了简单的select语句来理解需求。

示例表:

create table t1
(
col1 int,
col2 text
);
insert into t1 values(1,'Table T1');
insert into t1 values(2,'Table T1');

create table t2
(
col1 int,
col2 text
); 
insert into t2 values(1,'Table T2');
insert into t2 values(2,'Table T2');

函数:

create or replace function fn_testing(tbl_Name text)
returns table(col1 int,col2 text) as 
$$
begin
   return query execute 'select col1,col2 from '||tbl_name||'';
end;
$$
language plpgsql;

函数调用:

select * from fn_testing('t2'); 

我想在消息 window 中打印以下结果 window:

select col1,col2 from t1;

您可以使用 RAISE NOTICE 发送消息。

CREATE OR REPLACE FUNCTION fn_testing
                           (_tbl_name name)
                           RETURNS TABLE
                                   (col1 integer,
                                    col2 text)
AS
$$
DECLARE
  _query text;
BEGIN
  _query := format('SELECT col1, col2 FROM %I;', _tbl_name);
  RAISE NOTICE '%', _query;
  RETURN QUERY EXECUTE _query;
END;
$$
LANGUAGE plpgsql;

注意:标识符有一种特殊类型 name。为了防止 SQL 注入或错误,您应该确保动态标识符被正确引用。为此,您可以将 format()%I 结合使用。