gpt4 book ai didi

postgresql - 如何分别执行两个查询?

转载 作者:行者123 更新时间:2023-11-29 11:49:13 25 4
gpt4 key购买 nike

我创建了一个函数,它在表 my_table 中插入一些行并返回它们的标识符:

create function step_1() returns setof uuid as
$$
insert into my_table(...) values(...) returning identifier;
$$
language sql volatile;

现在我想在另一个选择查询中使用这个函数:

create function step_2() returns setof my_table as
$$
select *
from my_table
where identifier in(select * from step_1());
$$
language sql volatile;

这里的问题是 step_1() 永远不会执行,因为最初 my_table 不包含任何行,所以 PostgreSQL 优化为不执行 select *来自 step_1()

我想我需要两件事:

  • step_1() 应始终执行,无论 my_table 的内容如何。
  • step_1() 应该作为单独的查询/上下文执行,所以当 step_2() 执行 select 时,它实际上会查看插入的行。插入的行应该出现在执行 step_2() 的快照中。

我该怎么做?

最佳答案

create table my_table (identifier uuid)
;
create function step_1() returns setof uuid as $$
insert into my_table (identifier) values (gen_random_uuid())
returning identifier;
$$ language sql volatile
;
create or replace function step_2() returns setof my_table as $$
declare a_identifier uuid[];
begin
a_identifier := (
select array_agg(identifier)
from step_1() s (identifier)
)
;
return query
select *
from my_table
where identifier = any (a_identifier)
;
end;
$$ language plpgsql volatile
;

关于postgresql - 如何分别执行两个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48226314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com