在pgAdmin中,您可以使用'$SELECTION$'
占位符定义自己的macro。我有一个宏来计算表中的行数:
select count(*) as rows_in_table from $SELECTION$;
这很好用,但是当我在工作中编写了很多查询时,我认为让宏计算任何select语句的行会很好。我找到的唯一方法是创建处理两种不同情况的函数 - 只选择表名或选择查询:
create or replace function sys.number_of_rows(in sql text)
returns table (number_of_rows bigint) as
$body$
begin
sql:=
case
when position(' ' in trim(sql)) = 0 then 'select count(*) from ' || sql
else 'select count(*) from (' || sql || ') a ' end;
return query execute sql;
end;
$body$
language plpgsql;
现在使用宏select sys.number_of_rows('$SELECTION$');
我可以传递表名或整个查询。
这非常有效,但只有在数据库中存在函数sys.number_of_rows
时才有效。知道如何在不依赖功能的情况下实现相同的功能吗?
答案 0 :(得分:1)
如果您将$SELECTION$
替换为( $SELECTION$ ) as t
,那么当您的选择是完整查询时,它也应该有用。
我不使用pgAdmin,但我的SQL客户端支持相同的替换技术,我在那里使用相同类型的宏。