function - 循环以从 postgres 中的不同表运行多个更新

标签 function postgresql postgresql-9.1 plpgsql dynamic-sql

我正在运行 Postgres 9.1 并且有一个主表 (returns.msf_mse),其中包含 30 个空列和 30 个额外的临时表 (temp23_01 - temp23_30)。我想用每个临时表中特定列的数据填充主表中的每个空列。每个临时表中的相关列始终是 cumret_past

我试图创建一个存储过程/函数来实现这一点,但一直没有进展。我也试过循环更新语句但无法让它工作。我的基本查询是:

update returns.msf_mse as a
set cumret_past_23_01 = b.cumret_past  
from temp23_01 as b
where a.date = b.date
and a.permno = b.permno;

我只想运行此语句 30 次,每次递增 cumret_past_23_itemp23_i

最佳答案

你可以使用 DO语句 (pg 9.0+) 与 EXECUTE遍历所有表:

DO
$$
BEGIN

FOR i IN 1..30 LOOP
    EXECUTE '
    UPDATE returns.msf_mse a
    SET    cumret_past_23_' || to_char(i, 'FM00') || ' = b.cumret_past  
    FROM   temp23_' || to_char(i, 'FM00') || ' b
    WHERE  a.date = b.date
    AND    a.permno = b.permno';
END LOOP;

END
$$

to_char()格式化数字时注意前导空格.我使用 FM 修饰符来摆脱它。

另外:我不会使用 date 作为列名,它很容易与基类型或同名函数冲突。

关于function - 循环以从 postgres 中的不同表运行多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586752/

相关文章:

两个独立函数的 JavaScript 回调并在同一位置输出

c++ - 使用并行编程时调用函数

postgresql - 当成功有时导致退出代码为 1 时,我如何可靠地确定 pg_restore 是否成功?

postgresql - Psql如何在不同数据库下建表

sql - 如何在 PostgreSQL 9.1 数据库中删除多个触发器

sql - PostgreSQL - 使用数组排序。我可以动态创建数组吗?

php - 如何在 PHP 中创建 const 成员函数?

function - lua函数包括表中的参数

node.js - 如何使用 Bookshelf/Knex 在 Postgres 中插入/更新 `ARRAY` 列

ruby-on-rails - 如何指定 rails 使用哪个 postgres 副本