Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 资源所有者TopTransaction不拥有relcache引用_Postgresql_Pipelinedb - Fatal编程技术网

Postgresql 资源所有者TopTransaction不拥有relcache引用

Postgresql 资源所有者TopTransaction不拥有relcache引用,postgresql,pipelinedb,Postgresql,Pipelinedb,我在pipelinedb(基于postgresql 9.5.3)中创建了一个Continuue Transformer来捕获设备状态代码更改的数据。 然后这个连续变换将调用一个函数(触发器), 在函数中,代码根据设备状态代码的变化计算设备状态变化的时间范围,并将其写入表中。 函数中的操作包含select/upate/insert。 在运行期间,我在数据库日志中发现了很多错误消息,但这些错误似乎不会影响代码的正常执行。 然而,当我继续在数据库中接收到这个错误时,我仍然担心会发生什么不好的事情 八月

我在pipelinedb(基于postgresql 9.5.3)中创建了一个Continuue Transformer来捕获设备状态代码更改的数据。 然后这个连续变换将调用一个函数(触发器), 在函数中,代码根据设备状态代码的变化计算设备状态变化的时间范围,并将其写入表中。 函数中的操作包含select/upate/insert。 在运行期间,我在数据库日志中发现了很多错误消息,但这些错误似乎不会影响代码的正常执行。 然而,当我继续在数据库中接收到这个错误时,我仍然担心会发生什么不好的事情

八月12日03:38:44 tst-gp5-srv3管道[19296]:[141958-1]错误:重新缓存引用ct\u rtd\u his\u狭窄功能不属于资源所有者TopTransaction 8月12日03:38:44 tst-gp5-srv3管道[19296]:[141958-2]声明:ct\u rtd\u his\u狭窄功能

创建或替换函数chr.f_modify_mn_ver_fs() 将触发器返回为 $$ 声明 v_rowcount int; 开始 如果合并(NEW.NEW\u-dev“”)合并(NEW.old\u-dev“”),则 从chr.t\u mn\u ver\u fs中选择count(1)到v\u rowcount,其中mn\u code=NEW.mn\u code和ver\u type='dev',并且是'u current='Y'; 如果v_rowcount>0,则 更新chr.t\u mn\u版本 设置结束时间=NEW.arvl\u时间, is_current='N', 更新时间=时钟时间戳() 其中mn_代码=NEW.mn_代码 和veru type='dev' 并且是_current='Y'; 如果结束

插入到chr.t\u mn\u ver\u fs中(mn\u代码、ver\u类型、ver、begin\u时间、end\u时间、is\u current、INSERT\u时间)
值(NEW.mn_代码'dev',NEW.NEW_sver,NEW.arvl_time,NULL,'Y',clock_timestamp());
如果结束;
如果合并(NEW.NEW_usg“”)合并(NEW.old_usg“”),那么
从chr.t_mn_ver_fs中选择count(1)进入v_rowcount,其中mn_code=NEW.mn_code和ver_type='usg',并且是_current='Y';
如果v_rowcount>0,则
更新chr.t\u mn\u ver\u fs
设置结束时间=NEW.arvl\u时间,
is_current='N',
更新时间=时钟时间戳()
其中mn_代码=NEW.mn_代码
和ver_type='usg'
并且是_current='Y';
如果结束;
插入chr.t\u mn\u ver\u fs(mn\u代码、ver\u类型、ver、begin\u时间、end\u时间、is\u current、INSERT\u时间)
值(NEW.mn_代码'usg',NEW.NEW_-usg,NEW.arvl_-time,NULL,'Y',clock_-timestamp());
如果结束;
如果合并(NEW.NEW_sver“”)合并(NEW.old_sver“”),则
从chr.t\u mn\u ver\u fs中选择count(1)到v\u rowcount,其中mn\u code=NEW.mn\u code和ver\u type='sver',并且是当前的='Y';
如果v_rowcount>0,则
更新chr.t\u mn\u ver\u fs
设置结束时间=NEW.arvl\u时间,
is_current='N',
更新时间=时钟时间戳()
其中mn_代码=NEW.mn_代码
和ver_type='sver'
并且是_current='Y';
如果结束;
插入chr.t\u mn\u ver\u fs(mn\u代码、ver\u类型、ver、begin\u时间、end\u时间、is\u current、INSERT\u时间)
值(NEW.mn_代码'sver',NEW.NEW_sver,NEW.arvl_时间,NULL,'Y',clock_timestamp());
如果结束;
如果合并(NEW.NEW\u hver“”)合并(NEW.old\u hver“”),那么
从chr.t\u mn\u ver\u fs中选择count(1)到v\u rowcount,其中mn\u code=NEW.mn\u code和ver\u type='hver',并且是'u current='Y';
如果v_rowcount>0,则
更新chr.t\u mn\u版本
设置结束时间=NEW.arvl\u时间,
is_current='N',
更新时间=时钟时间戳()
其中mn_代码=NEW.mn_代码
和ver_type='hver'
并且是_current='Y';
如果结束;
插入chr.t\u mn\u ver\u fs(mn\u代码、ver\u类型、ver、begin\u时间、end\u时间、is\u current、INSERT\u时间)
值(NEW.mn_代码'hver',NEW.NEW_hver,NEW.arvl_时间,NULL,'Y',clock_timestamp());
如果结束;
归还新的;
结束;
$$
语言plpgsql;

请参阅GitHub问题,了解对此的回应:

CREATE OR REPLACE FUNCTION chr.f_modify_mn_ver_fs() RETURNS trigger AS $$ DECLARE v_rowcount int; BEGIN IF COALESCE(NEW.new_dev,'') <> COALESCE(NEW.old_dev,'') THEN SELECT count(1) INTO v_rowcount FROM chr.t_mn_ver_fs WHERE mn_code=NEW.mn_code AND ver_type='dev' AND is_current='Y'; IF v_rowcount > 0 THEN UPDATE chr.t_mn_ver SET end_time = NEW.arvl_time, is_current = 'N', update_time = clock_timestamp() WHERE mn_code = NEW.mn_code AND ver_type='dev' AND is_current = 'Y'; END IF;

    INSERT INTO chr.t_mn_ver_fs (mn_code, ver_type, ver, begin_time, end_time, is_current, insert_time)
                VALUES (NEW.mn_code, 'dev', NEW.new_sver, NEW.arvl_time, NULL, 'Y', clock_timestamp());
  END IF;
  IF COALESCE(NEW.new_usg,'') <> COALESCE(NEW.old_usg,'') THEN
    SELECT count(1) INTO v_rowcount FROM chr.t_mn_ver_fs WHERE mn_code=NEW.mn_code AND ver_type='usg' AND is_current='Y';
    IF v_rowcount > 0 THEN
        UPDATE chr.t_mn_ver_fs
              SET end_time = NEW.arvl_time,
                  is_current = 'N',
                  update_time = clock_timestamp()
              WHERE mn_code = NEW.mn_code
              AND ver_type='usg'
              AND is_current = 'Y';
    END IF;
    INSERT INTO chr.t_mn_ver_fs (mn_code, ver_type, ver, begin_time, end_time, is_current, insert_time)
                VALUES (NEW.mn_code, 'usg', NEW.new_usg, NEW.arvl_time, NULL, 'Y', clock_timestamp());
  END IF;
  IF COALESCE(NEW.new_sver,'') <> COALESCE(NEW.old_sver,'') THEN
      SELECT count(1) INTO v_rowcount FROM chr.t_mn_ver_fs WHERE mn_code=NEW.mn_code AND ver_type='sver' AND is_current='Y';
      IF v_rowcount > 0 THEN
        UPDATE chr.t_mn_ver_fs
              SET end_time = NEW.arvl_time,
                  is_current = 'N',
                  update_time = clock_timestamp()
              WHERE mn_code = NEW.mn_code
              AND ver_type='sver'
              AND is_current = 'Y';
      END IF;
      INSERT INTO chr.t_mn_ver_fs (mn_code, ver_type, ver, begin_time, end_time, is_current, insert_time)
                VALUES (NEW.mn_code, 'sver', NEW.new_sver, NEW.arvl_time, NULL, 'Y', clock_timestamp());
  END IF;
  IF COALESCE(NEW.new_hver,'') <> COALESCE(NEW.old_hver,'') THEN
      SELECT count(1) INTO v_rowcount FROM chr.t_mn_ver_fs WHERE mn_code=NEW.mn_code AND ver_type='hver' AND is_current='Y';
      IF v_rowcount > 0 THEN
        UPDATE chr.t_mn_ver
              SET end_time = NEW.arvl_time,
                  is_current = 'N',
                  update_time = clock_timestamp()
              WHERE mn_code = NEW.mn_code
              AND ver_type='hver'
              AND is_current = 'Y';
      END IF;
      INSERT INTO chr.t_mn_ver_fs (mn_code, ver_type, ver, begin_time, end_time, is_current, insert_time)
      VALUES (NEW.mn_code, 'hver', NEW.new_hver, NEW.arvl_time, NULL, 'Y', clock_timestamp());
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;