Postgres触发器函数更新另一个表中的聚合结果

2024-04-30

我有两张桌子。表 x 和表 y。表 x 每天都会更新。我希望在表 x 中插入新数据后立即更新表 y。表 y 包含表 x 中每天所有更新的聚合值。 Date为Date类型,其余两列为real类型。 Table_x 可以每天更新,table_y 应自动更新。

Table x:

Date    Sales    product
12/12/2017   4000   2
12/12/2017   3000   1
12/12/2017   2000   1
12/12/2017   5000   3
11/12/2017   1000   3
11/12/2017   2000   4

Table y(如下图所示更新):

Date   Sales   product
12/12/2017   14000   7
11/12/2017   3000    7

我编写了如下所示的触发器函数,但它更新每个项目而不是聚合值。

CREATE OR REPLACE FUNCTION public.rec_insert_table_y()
RETURNS trigger AS
$BODY$  
BEGIN  
INSERT INTO table_y ("Date","Sales","product")
SELECT NEW."Date",(sum(NEW."Sales")),(sum(NEW."product"))
GROUP BY NEW."Date";
RETURN NEW;

触发功能:

CREATE TRIGGER insert_into_table_y
AFTER INSERT
ON public.table_x
FOR EACH ROW
EXECUTE PROCEDURE public.rec_insert_table_y();

您可以编写一个触发器,用于更新聚合值(如果存在)或插入(如果不存在)。

此外,您还必须注意“x”表中的更新和删除:

create function y_x_trg() returns trigger
  language plpgsql
as
$body$
declare
  row_exists boolean;
begin
  if tg_op<>'INSERT' then
    update y 
      set sales = y.sales - old.sales,
          product = y.product - old.product
      where y.date = old.date
      returning true into row_exists;
  end if;
  if tg_op<>'DELETE' then
    update y 
      set sales = y.sales + new.sales,
          product = y.product + new.product
      where y.date = new.date
      returning true into row_exists;
    if row_exists is not true then
      insert into y values (new.date, new.sales, new.product);
    end if;
    return new;
  else
    return null;
  end if;
end;
$body$;

create trigger y_x_trg AFTER INSERT OR UPDATE OR DELETE ON x
    FOR EACH ROW EXECUTE PROCEDURE y_x_trg();

您可以在以下位置查看正在运行的示例http://rextester.com/FVR79644 http://rextester.com/FVR79644

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres触发器函数更新另一个表中的聚合结果 的相关文章

  • postgresql中数组的区别

    我有两个数组 1 2 3 4 7 6 and 2 3 7 在 PostgreSQL 中可能有共同的元素 我想做的是从第一个数组中排除第二个数组中存在的所有元素 到目前为止我已经取得了以下成果 SELECT array SELECT unne
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • 手动更改postgresql中查询的执行计划?

    是否可以在postgresql中手动更改执行计划的操作顺序 例如 如果我总是想在过滤之前进行排序操作 尽管这在 postgresql 的正常使用中没有意义 是否可以通过例如手动强制执行该操作改变运营的内部成本 如果我实现自己的功能呢 是否可
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • Postgres LIMIT/OFFSET 奇怪的行为

    我正在使用 PostgreSQL 9 6 我有一个这样的查询 SELECT anon 1 id AS anon 1 id anon 1 is valid AS anon 1 is valid anon 1 first name AS ano
  • 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL 中

    我想将以下 json 对象保存到 PostgreSQL 数据库表中as jsonb fname john lname doe 我当前使用 PGObject 创建对象并将类型设置为 jsonb 并将值作为 json 字符串传递 寻找更好的 m
  • PostgreSQL:使用for循环迭代表行,根据当前行检索列值

    我有以下2张表 CREATE TABLE salesperson t salespersonid numeric 4 0 NOT NULL salespersonname character varying 25 salespersonte
  • 如何在连接到 Heroku PostgreSQL 的 Flask 应用程序上处理更多并发用户?

    Heroku 上的 Flask API 有许多端点 它们在将 json 化结果返回给客户端之前在我的 Heroku PostgreSQL 数据库上运行查询 我当前的计划是 Hobby Basic 层 因此数据库最多只能处理 20 个连接 如
  • Django 中从 sqlite 迁移到 postgresql

    我想迁移自sqlite to PostgreSQL db 我安装了 postgresql 并在其 shell 上创建数据库 然后配置我的 django 设置如下 default ENGINE django db backends postg
  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 如何在 Django QuerySet 中将 DateField() + TimeField() 转换为本地时间?

    我的模型为这些字段 date models DateField 开始时间 models TimeField 结束时间 models TimeField 我想用以下方式注释查询集start datetime and end datetime
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • Django 独特的不工作

    我在从查询中过滤掉重复项时遇到问题 我正在使用 Django 1 4 和 Postgres 8 4 13 我在我的模型对象上使用这个查询 它是一个 jquery 自动完成 term request GET get term field re
  • 将 SQL Server 2008 DB 迁移到 Postgres [重复]

    这个问题在这里已经有答案了 我想将 SQL Server 2008 数据库迁移到 Postgres 有没有一种无痛的方法来做到这一点 是否有任何工具可以扫描架构和存储过程以标记兼容性问题 无痛http dbconvert com conve
  • “WHERE”处或附近的语法错误

    创建 postgres 函数时会导致错误 如下所示 错误 WHERE 处或附近的语法错误 第 19 行 其中 s shift id shiftid 错误 错误 WHERE 处或附近的语法错误 SQL状态 42601 人物 108 请帮忙 C
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题

随机推荐

  • 检测 jQuery UI 自动完成

    如何检测输入框当前是否为 jQuery UI 自动完成功能 似乎没有一个本机方法 但我希望有像这样的简单方法 if q autocomplete Do something 然而 这个条件似乎总是返回 true if q hasClass a
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 在 ruamel.yaml 的列表元素中添加注释

    我使用 Python 在 YAML 文件的列表中动态添加元素 并且我想在我添加的每个元素旁边添加注释 以下是所有所需的格式 flow style example a b c first list d e second list block
  • flutter生成的3个APK有什么区别?

    我需要了解Android设备架构 以及为什么我使用时会生成三种不同类型的APK flutter build apk split per abi 当我使用 flutter build apk 我得到一个名为 fat APK 的大 APK 文件
  • Windows批处理文件:在for循环中设置变量

    我有许多具有相同命名方案的文件 作为示例 四个文件分别称为 num 001 001 txt num 002 001 txt num 002 002 txt num 002 003 txt 第一组数字代表它来自哪个 包 第二组数字只是用来区分
  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • AJAX 表单不显示成功或错误消息

    这个问题我以前也问过 但还是没搞明白 我做了一些改变 但不幸的是我仍然没有得到任何运气 表单本身可以工作 但当用户尝试发送表单时 它还应该显示错误或成功消息 但它不显示消息 而是发送表单而不显示它 看看我的代码 HTML
  • 我可以在运行时更改 Silverlight 浏览器外设置吗?

    我有一个代码库 可以在各种配置中安装 OOB SL5 应用程序 根据运行时的配置 由初始化参数选择 我想在执行安装之前更新 OOB 设置 标题 窗口标题 看来唯一的方法是在编译时通过 OutOfBrowserSettings xml 文件
  • 对 Windows 窗体上的字段执行数据验证的最简单方法

    我有一个 Windows 窗体项目 我想在用户按下底部的计算按钮之前强制用户在某些字段中输入值 这些字段包括三对单选按钮 five 文本框和一个组合框 因此基本上所有这些字段都需要包含一个值才能执行计算 此外 文本框应包含numbers 任
  • 定义 WebActivator.PreApplicationStartMethod 类的初始化顺序

    我有几个 WebActivator PreApplicationStartMethod 装饰类 一个用于 Ninject 另一个用于 AwesomeMVC 第三个用于后台任务调度程序 问题是调度程序类需要利用 IoC 容器解决的依赖关系 我
  • 作用域对象的 Xtext 示例

    我正在寻找一个示例 在 XText 中 说明如何在用户定义的对象成员上实现代码完成 据我所知 我需要使用 IScope 但所有这些如何连接在一起还不清楚 鉴于trait是用户定义的类型 我如何构建语法来编码完成 验证其中包含的方法Strin
  • WordPress URL 中的正斜杠

    我正在将我的网站从 Drupal 迁移到 Wordpress 在 Drupal 中 我可以轻松地给 URL 指定一个别名 这个别名可以是任何东西 即 www example com abc xyz hello html 但在 WordPre
  • 来自两个表的数据而不重复第一个表的数据?

    我的 MySQL 数据库中有两个表 用户表和用户元表 我正在寻找一种方法 通过一个查询从两个表中获取所有信息 但不重复用户表中的信息 这也是与用户 ID 号相关的所有信息 例如 user id 1 有没有办法查询数据库并收集两个表中的所有信
  • 如何从 URL 获取视图中的当前路由 ID (ASP.NET MVC)

    在从 URL 例如 Controller Action 1 返回的视图中 假设默认路由为controller action id 如何从视图中访问 ID 我不想在处理请求时将其添加到操作级别的 ViewData 字典中 我认为这就是您正在寻
  • Crystal Reports 间歇性错误“无法提交请求以进行后台处理。”

    我们在带有 NET Framework 3 5 SP1 的 Windows Server 2008 上运行 Crystal Reports 我见过许多导致一般错误 无法提交请求进行后台处理 的原因 然而 在其他论坛上 由于特定报告的特定格式
  • 两种模板类型和两个模板参数列表有什么区别?

    这两个声明有什么区别 template
  • 如何在自定义服务器控件asp中使用.resx和.resource文件?

    我正在编写自己的服务器端控件 并且使用存储在 resx文件 在控制台应用程序中 此代码运行良好 ResXResourceReader rsxr new ResXResourceReader Resource1 resx foreach Di
  • 将 XML 反序列化为类

    我有正在反序列化的 XML 这是我的 XML
  • 自定义地图标注视图点击即可隐藏

    我已经制作了自定义地图标注 我的标注包含UIButtons and UITextView 当我点击时UIButton 按起来很好 但是当我点击UITextView它将光标移动到点击位置 然后取消选择图钉并消失标注 我已经实施了hitTest
  • Postgres触发器函数更新另一个表中的聚合结果

    我有两张桌子 表 x 和表 y 表 x 每天都会更新 我希望在表 x 中插入新数据后立即更新表 y 表 y 包含表 x 中每天所有更新的聚合值 Date为Date类型 其余两列为real类型 Table x 可以每天更新 table y 应