当前位置: 首页 > 面试题库 >

使用Postgres 8.4中的每一行调用一次函数进行更新

孔甫
2023-03-14
问题内容

我有以下UPDATE语句:

update mytable
   set a = first_part(genid()),
       b = second_part(genid()),
       c = third_path(genid())
 where package_id = 10;

在此示例中,该函数genid()每行被调用三次,这是错误的-我希望该函数的每行仅被调用一次mytable

我正在使用PostgreSQL 8.4数据库。如何编写正确的更新?

我已经尝试过这样的事情:

update mytable
   set a = first_part(g),
       b = second_part(g),
       c = third_path(g)
 where package_id = 10
  from genid() as g;

但这没有用,因为整个更新语句genid()仅被调用了 一次


问题答案:

您是否尝试过Postgres的非标准UPDATE .. FROM条款?我想这会起作用

update mytable
   set a = first_part(gen.id),
       b = second_part(gen.id),
       c = third_path(gen.id)
  from (
          select genid() as genid, id
          from mytable 
          where package_id = 10
       ) gen
 where mytable.id = gen.id;
 --and package_id = 10 -- This predicate is no longer necessary as the subquery
                       -- already filters on package_id, as Erwin mentioned

请注意,我强制在子选择内genid()每个记录仅被调用一次mytable。然后,我将自我加入mytablegen使用一个假设的id专栏。请参阅此处的文档:

http://www.postgresql.org/docs/current/interactive/sql-
update.html



 类似资料:
  • 问题内容: 使用它可以在指定的时间启动功能: 但是,如果我想多次启动该功能怎么办?每次经过一个时间间隔,我都想执行该功能(假设每60秒执行一次)。 问题答案: 如果您不在乎内的代码是否可能花费比您的间隔更长的时间,请使用: 一遍又一遍地触发作为第一个参数传入的函数。 更好的方法是与函数一起使用: 这样可以保证在执行代码之前不会进行下一个调用。在本示例中,我将其用作函数参考。这是给函数命名并在其中调

  • 使用Laravel的雄辩模型,我如何在访问对象时更新对象的数据,如果它已经 我有另一个API,我想确保数据是半最新的,但想缓存在我的数据库中的数据,而不是调用他们的API每次页面加载。 是否有Laravel在每次加载模型时调用的函数,我可以检查30天是否已经过去,调用API加载新数据,然后保存它?

  • 我有一个函数,使API调用服务器和更新用户界面与新数据。我想使,使每30秒我使API调用不同的url每次?这些API调用应该是不间断的,只要应用程序正在运行。

  • 我的应用程序的一个核心功能是它有一个持续的通知和一个每分钟更新的倒计时--即使应用程序被Android操作系统关闭。 首先,我使用一个服务来运行计时器并更新通知,但这是一个内存/电池占用。因此,我转而使用来完成计时器和重复警报,每60秒左右唤醒一次以更新通知: 什么是一种好方法来确保正在进行的通知至少每60秒更新一次呢?除了回到使用一个服务(啊!加上操作系统有时会在内存很少的设备上直接杀死服务)之

  • 问题内容: 我有一张桌子,看起来像这样 我正在寻找一种方法,以使用“ VALUE”列中其他行中具有相同“ NAME”的数据更新值“ Test2”和“ Test”(此处ID并非唯一,ID的复合键和NAME成为唯一的一行)。例如,我正在寻找的输出是: 如果在另一个表中,我会没事的,但是我对于如何使用相同的NAME值引用当前表中的另一行感到困惑。 更新资料 修改完manji查询后,下面是我用于有效解决方

  • 例如。 现在我正在使用更多,我想知道是否有一种整洁/自然的方法来做这件事?因为这不是我想要的: