繁体   English   中英

使用 postgres CTE 从 EXISTS 查询中运行 sql function

[英]Run sql function from EXISTS query using postgres CTE

在 postgres sql function 中,我只想在 CTE 返回任何行时运行function_update 此查询适用于此。

with common_table as (select 1 where true) select function_update('value') from common_table

但是,如果我还想返回function_update是否更新了任何行,那么它就不起作用。 function 确实根据 CTE 是否返回任何行正确返回truefalse ,但function_update似乎没有运行。

with common_table as (select 1 where true) select exists(select function_update('value') from common_table)

function_update只是一些简单的东西,比如update mytable set column1 = 'changed' where column2 = arg_value 当我运行上面的第一个查询而不是第二个查询时, mytable会更新。 为什么这没有按预期工作,我需要更改什么?

为什么这没有按预期工作

Exists 检查存在和查询优化器不必执行 function。 以下示例显示我们可以预期除以 0 错误:

select 1 WHERE EXISTS (SELECT 1/0);
-- 1

db<>小提琴演示


我需要改变什么?

一种方法是强制实现:

select 1 WHERE EXISTS (WITH cte AS MATERIALIZED (SELECT 1/0) SELECT * FROM cte)
-- division by 0

db<>小提琴演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM