我在下面的代码示例中尝试模拟我的问题。在下面的代码中,我在一个存储过程中执行了 select * from test
。正如我们所知,为此必须使用 perform
关键字。这很有效:
perform * from test;
然而,如果我尝试将这个简单的查询重写为CTE,我无法让它正常工作。我得到了一个语法错误。
with test_as_cte as(select * from test) perform * from test_as_cte;
这种情况是否可能?正确的语法是什么?我尝试了几种替代方案并查阅了文档,但目前还没有成功。
(请注意,这只是一个示例,用于解释我的问题。我知道这些查询实际上没有任何意义。)
create table test
(
key int primary key
);
create function test() returns trigger as
$$
begin
raise notice 'hello there';
-- this does work
perform * from test;
-- this doesn't work
with test_as_cte as(select * from test) perform * from test_as_cte;
return new;
end;
$$
language plpgsql;
create trigger test after insert on test for each row execute procedure test();
insert into test(key) select 1;
begin raise notice 'hello there'; return new; end
- jian