【发布时间】:2021-09-14 03:57:42
【问题描述】:
我有一个 postgres 数据库表连接到在“运行”之前运行验证检查的应用程序。 由于不正确的默认约束(超过或低于最小最大值),这些验证通常会失败。而不是手动更新这些,我想运行一个查询来查找任何高于或低于最小值/最大值的默认值,并将它们更新为介于两者之间的任意数字(应用程序是自我更正的,所以它不会不管它降落在哪里)。
这是我拥有的,但它没有运行:
do $$
begin
for i in (select id,* from constraints_table)
loop
if i.default_value < i.min_value or i.default_value>i.max_value
then
update constraints_table
set i.default_value = ((i.min_value + i.max_value)/2)
where id=i.id;
end if;
end loop;
end; $$
a) 谁能帮忙解决这个问题
b) 有没有更简单的方法? (python脚本?)
【问题讨论】:
-
我也试过这个(好得令人难以置信): update constraints_table set default_value = CASE default_value when (default_value > max_value) then (default_value=max_value-1) when (default_value
-
使用 CTE (WITH) 创建一个列表并照常更新值。 stackoverflow.com/questions/36908495/…
标签: sql postgresql for-loop if-statement