PostgreSQL:检查触发器函数中的 NEW 和 OLD

2024-01-11

我想创建一个触发器来计算行数并更新其他表中的字段。我当前的解决方案适用于 INSERT 语句,但当我删除一行时会失败。

我当前的功能:

 CREATE OR REPLACE FUNCTION update_table_count()
RETURNS trigger AS
$$
DECLARE updatecount INT;
  BEGIN
      Select count(*) into updatecount 
        From source_table 
       Where id = new.id;
      Update dest_table set count=updatecount 
       Where id = new.id;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

触发器是一个非常基本的触发器,看起来像。

CREATE TRIGGER count_trigger
AFTER INSERT OR DELETE
ON source_table
FOR EACH ROW
EXECUTE PROCEDURE update_table_count();

当我执行 DELETE 语句时,出现以下错误:

错误:记录“新”尚未分配

详细信息:尚未分配的记录的元组结构是不确定的。

我知道一种解决方案可能是为 DELETE 创建一组触发器和函数,为 INSERT 语句创建一组触发器和函数。但我想做得更优雅一点,想知道是否有解决方案来检查当前上下文中是否存在 NEW 或 OLD 并仅实现 IF ELSE 块。但我不知道如何检查这个上下文敏感项目。

感谢您的帮助


使触发器函数根据触发器的触发方式执行不同操作的常用方法是通过以下方式检查触发器操作:TG_OP https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

CREATE OR REPLACE FUNCTION update_table_count()
RETURNS trigger AS
$$
DECLARE 
  updatecount INT;
BEGIN
  if tg_op = 'UPDATE' then 
    select count(*) into updatecount from source_table where id = new.id;
    update dest_table set count=updatecount where id = new.id;
  elsif tg_op = 'DELETE' then 
    ... do something else
  end if;
  RETURN NEW;
END;
$$
LANGUAGE plpgsql;

不相关,但是:语言名称是一个标识符。不要使用单引号引用它。

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

PostgreSQL:检查触发器函数中的 NEW 和 OLD 的相关文章

  • PostgreSQL:比较 json [重复]

    这个问题在这里已经有答案了 众所周知 目前 PostgreSQL 还没有方法来比较两个 json 值 比较就像json json不起作用 但是选角呢json to text before Then select x a y b json t
  • Postgres 平均值计算忽略 null

    这是我的 postgres 表 name revenue John 100 Will 100 Tom 100 Susan 100 Ben 5 rows 在这里 当我计算平均收入时 它返回 100 这显然不是这种情况 而总和 计数 即 400
  • 随机数据库与 AWS 中的 Django 和 Postgresql 断开连接

    我试图找出 Django 和数据库连接错误问题的根源 此时 我正在调试提示 因为我认为症状太不具体 一些背景 我一直在使用这个堆栈 在 AWS 中部署了很多年 没有出现任何问题 Ubuntu 在本例中为 20 04 LTS Nginx Uw
  • postgresql 中的锁定表

    我有一个名为 games 其中包含一个名为 title 该列是唯一的 数据库中使用PostgreSQL 我有一个用户输入表单 允许他插入新的 game in games 桌子 插入新游戏的功能会检查之前输入的游戏是否存在 game 与相同的
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL 中

    我想将以下 json 对象保存到 PostgreSQL 数据库表中as jsonb fname john lname doe 我当前使用 PGObject 创建对象并将类型设置为 jsonb 并将值作为 json 字符串传递 寻找更好的 m
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • PostgreSQL - 根据另一个单元格值设置默认单元格值

    如果我有一个专栏说column a任何给定值 我想要另一列column b有一个default value根据 的值column a 换句话说 if column a peter then column b default value do
  • Postgres:显示继承的字段

    我应该实现什么查询来获取继承的列 读过this http www alberton info postgresql meta info html综合帖子没有找到解决办法 如果我理解正确的话 您想知道作为表之间继承的一部分的列的名称 SELE
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • pg_dump 与 pg_dumpall?使用哪一个来进行数据库备份?

    I tried pg dump然后在另一台机器上我尝试导入 sql 并填充数据库 我看到 CREATE TABLE ERROR role prod does not exist CREATE TABLE ERROR role prod do
  • 如何在 Django QuerySet 中将 DateField() + TimeField() 转换为本地时间?

    我的模型为这些字段 date models DateField 开始时间 models TimeField 结束时间 models TimeField 我想用以下方式注释查询集start datetime and end datetime
  • postgresql 登录到另一个表时发生冲突

    我正在使用 PostgreSQL 9 5 并尝试使用批量插入每天插入数百万行 INSERT INTO tours as cst adults country id price VALUES 3 129 80 2 119 120 on con
  • TimescaleDB 查询选择列值较上一行发生更改的行

    最近刚刚开始使用 TimescaleDB 和 Postgres 来处理大多数数据请求 然而 我遇到了一个问题 即我对时间序列数据的请求效率极低 它是一个可以是任意时间长度 具有特定整数值的数据系列 大多数时候 除非出现异常 否则该值将是相同
  • Django 模型:默认日期时间未转换为 SQL CURRENT_TIMESTAMP

    我正在使用 Django 模型创建 PostgreSQL DB 我有一个 DateTimeField 我想将当前时间戳设置为默认值 我知道有多个消息来源建议如何做到这一点 但是 当我在 Django 之外检查数据库时 默认时间戳不会显示 我
  • 将 SQL Server 2008 DB 迁移到 Postgres [重复]

    这个问题在这里已经有答案了 我想将 SQL Server 2008 数据库迁移到 Postgres 有没有一种无痛的方法来做到这一点 是否有任何工具可以扫描架构和存储过程以标记兼容性问题 无痛http dbconvert com conve
  • 如何确定层级组织中的权限?

    我正在尝试创建高性能逻辑来确定分层组织内的权限 员工被分配到一个或多个单位 单元是分层的 理论上 无限深度 实际上不超过 6 层 例如 员工Jane可能是Supervisor of the Accounts Receivable单元 的子单
  • Rails 的多个数据库不适用于远程数据库

    我有一个远程只读 postgres 数据库 它是通过 docker 实例维护的卡尔达诺数据库同步 https github com input output hk cardano db sync 我设法将开发数据库连接到它 它工作正常 但由

随机推荐

  • SPARQL连接两个对象的路径是什么?

    大家好 我想知道两个节点之间是否存在关系 以及连接它们的谓词是否存在 假设我的图表如下所示 Uri1 pred a pred b Uri2 Uri3 Uri4 Uri5 pred c pred d Uri6 Uri7 pred a
  • 在 Objective C 中字符串值总是显示 nil

    我已经升级到 Xcode 5 0 当我在调试模式下运行应用程序并尝试打印NSString控制台中的值 它给了我以下错误 有任何想法吗 error warning couldn t get cmd pointer substituting N
  • 如何在 tkinter 画布上绘制圆弧?

    我正在研究自动机理论 我被要求对自动机的图 树 进行编程 它看起来或多或少像 到目前为止我得到了这个 我正在使用tkinter and canvas绘制 from tkinter import Tk Canvas mainloop def
  • 集合视图单元格未出现

    我想显示尽可能多的collectionViewCells with buttons因为我的数组中有字符串 但是当我启动模拟器时 只有背景CollectionView但没有显示单元格 可能是什么错误 这是我的代码CollectionViewC
  • 不同形状的 NumPy 数组集合的组合平均值和标准差

    假设我有带有形状的 Numpy 数组 682 89 138 2668 76 89 491 62 48 我应该如何计算所有三个数组组合的平均值和标准差 如果它们的形状相同 我可以使用np stack 然后获取结果数组的平均值和标准差 是否可以
  • 如何更改列表视图特定项目的颜色?

    我有一个自定义列表适配器 如下所示 public class CustomListViewAdapter2 extends ArrayAdapter
  • 3 表 SELECT 查询的正确语法

    我有 3 张桌子 表格帖子 tbl评论 tblUsers 我正在尝试获取帖子列表以及相关评论 棘手的部分似乎是让帖子和评论显示正确的作者 用户 这是我得到的最接近的结果 但帖子作者是不正确的 我将我的 CFOutput 分组在 pid 上
  • 什么是赋值表达式(使用“walrus”或“:=”运算符)?为什么要添加这个语法?

    从 Python 3 8 开始 代码可以使用所谓的 walrus 运算符 记录在PEP 572 https www python org dev peps pep 0572 for 赋值表达式 这似乎是一个非常重要的新功能 因为它允许在理解
  • 如何将代码库从一个 svn 存储库迁移到另一个保留历史记录的存储库?

    我在一个结构不良的 svn 存储库中有一个分支 需要将其删除并移动到另一个 svn 存储库 我正在尝试清理它 如果我做一个svn log并不是停止复制 重命名我可以看到我关心的所有 3427 次提交 除了编写一些主要脚本之外 是否有某种方法
  • 函数名 + tab 在 IPython 中不返回文档字符串

    在IPython中 我习惯这样写 功能 然后点击一个选项卡 获取文档字符串的内容和命名参数的列表 然而 自从我安装了 IPython 2 0 后 它就停止工作了 有解释或已知的修复吗 哦 现在是捷径shift tab
  • 具有独立消费者的单个InputStream的并发处理

    我需要生成N个消费者线程 它们同时处理相同的InputStream 例如 以某种方式转换它 计算校验和或数字签名等 这些消费者不相互依赖 并且它们都使用第三方库 这些库接受InputStream作为数据来源 所以我能做的是 创建一些 Inp
  • Rails 3 中使用联接获取数据的范围

    从 Rails 2 到 Rails 3 我从未如此努力地理解某些东西 侧面社论 无论如何 在 Rails 3 应用程序中我有以下模型 User has many answers Answer belongs to user belongs
  • 如何从 .app 中执行 shell 脚本,并将其显示在终端中?

    我的目标是通过双击 OS X app 来执行 shell 脚本 并且终端对用户可见 我的脚本有一个 CLI GUI 有任何想法吗 我试过了appify https gist github com mathiasbynens 674099但我
  • Windows 上的 Fabric Composer?

    Windows 支持 Fabric Composer 吗 https fabric composer github io tasks precessions html https fabric composer github io task
  • C、C++ 中可重入代码的推荐实践

    我正在经历一个重入指南 http www ibm com developerworks linux library l reent html编写可重入代码时的推荐实践 还有哪些其他参考文献和资源涵盖该主题 可以使用哪些类似 lint 的工具
  • 分发使用自动模块的 JavaFX 应用程序

    我创建了一个 JavaFX 应用程序 它在我的 Intellij IDE 中完美运行 现在我想分发该应用程序 即我想获得一个用户可以下载的安装程序 然后它会为他们安装该应用程序 我发现一篇关于此的非常有趣的文章here https walc
  • 如何设置Emacs默认编译目录?

    我正在 Emacs 下编写 OCaml 代码 我有一个makefile在工作文件夹中 以及几个包含以下内容的子文件夹 ml文件 如果我启动M x compile and make在缓冲区上工作正常makefile 但不适用于 a 的缓冲区
  • C++:ifstream::getline 问题

    我正在读取这样的文件 char string 256 std ifstream file file txt open the level file if file check if the file loaded fine error wh
  • 在 Z3 中定义带有约束的代数数据类型

    我看过一些在线材料 用于定义代数数据类型 例如 Z3 中的 IntList 我想知道如何定义具有逻辑约束的代数数据类型 例如 如何定义代表正整数的 PosSort SMT中的全部功能 在 SMT 中函数总是完整的 这提出了如何对部分函数 例
  • PostgreSQL:检查触发器函数中的 NEW 和 OLD

    我想创建一个触发器来计算行数并更新其他表中的字段 我当前的解决方案适用于 INSERT 语句 但当我删除一行时会失败 我当前的功能 CREATE OR REPLACE FUNCTION update table count RETURNS