已删除 Postgres 中的触发器 - 仍在尝试 运行 某处。在 postgres 日志中显示为失败

Deleted trigger in Postgres - still trying to run somewhere. Showing up as failed in postgres Log

我什至不确定从哪里开始探索这个。

我有一个 postgres 数据库。我创建了三个看起来像这个的函数 -

CREATE OR REPLACE FUNCTION mid1_spm()
  RETURNS trigger AS
$BODY$
BEGIN
    insert into machines_spm_storage ( SELECT * FROM machineid1_spm_step4);
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION mid1_spm()
  OWNER TO postgres;

我使用以下脚本创建触发器:

--trigger function to populate spm storage table
CREATE OR REPLACE FUNCTION mid3_spm() RETURNS TRIGGER AS
$BODY$
BEGIN
    insert into machines_spm_storage ( SELECT * FROM machineid3_spm_step4);
END;
$BODY$
language plpgsql;


--trigger to initiate function
CREATE TRIGGER trigger_mid3_spm
    AFTER UPDATE ON machines_machineevent
    FOR EACH ROW
    EXECUTE PROCEDURE mid3_spm();

触发器的目标是从视图中提取数据并将其存储在 machines_spm_storage table.

当我第一次创建测试触发器时,table 名称是 machine_5_spm_storage。现在我不断收到此错误(在 postgres 日志中)

2017-03-06 14:05:01 EST [9468-1] epic@epic_ar_db ERROR:  relation "machine_5_spm_storage" does not exist at character 13
2017-03-06 14:05:01 EST [9468-2] epic@epic_ar_db STATEMENT:  INSERT INTO machine_5_spm_storage ( SELECT * FROM machine_5_spm_step4);

我已经删除了这个 table,删除了所有触发器,重新启动了 postgres 服务,删除并重建了数据库。我不知道为什么(甚至如何)它仍在尝试 运行 我原来的触发器。

我刚刚删除了原始文件以微调我的内容。我确实发现如果我更改 table 名称我试图将数据插入到错误中的名称中 - 问题消失并且触发器工作正常。但是脚本中甚至没有引用旧的 table.

感谢任何帮助或想法!

P.S。我知道触发器本身是有效的——我的问题是它似乎一直在引用一个不再存在的 table。而且它没有意识到我创建了一个新的 - 相同的功能 - 我只是更改了名称)。

更新:这是触发器和函数的最新版本:

函数:

-- Function: mid1_spm()

-- DROP FUNCTION mid1_spm();

CREATE OR REPLACE FUNCTION mid1_spm()
  RETURNS trigger AS
$BODY$
BEGIN
    insert into machines_spm_storage ( SELECT * FROM machineid1_spm_step4);
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION mid1_spm()
  OWNER TO postgres;

触发器:

CREATE TRIGGER trigger_mid2_spm
  AFTER UPDATE
  ON machines_machineevent
  FOR EACH ROW
  EXECUTE PROCEDURE mid2_spm();

真正唯一的区别是视图的名称和 table 的名称。但是我完全放弃(级联)了原来的测试版。

今天的 postgres 日志如下所示:

2017-03-07 10:45:01 EST [12069-1] epic@epic_ar_db ERROR:  relation "machine_5_spm_storage" does not exist at character 13
2017-03-07 10:45:01 EST [12069-2] epic@epic_ar_db STATEMENT:  INSERT INTO machine_5_spm_storage ( SELECT * FROM machine_5_spm_step4);
2017-03-07 10:50:01 EST [12210-1] epic@epic_ar_db ERROR:  relation "machine_5_spm_storage" does not exist at character 13
2017-03-07 10:50:01 EST [12210-2] epic@epic_ar_db STATEMENT:  INSERT INTO machine_5_spm_storage ( SELECT * FROM machine_5_spm_step4);
2017-03-07 10:55:02 EST [12434-1] epic@epic_ar_db ERROR:  relation "machine_5_spm_storage" does not exist at character 13
2017-03-07 10:55:02 EST [12434-2] epic@epic_ar_db STATEMENT:  INSERT INTO machine_5_spm_storage ( SELECT * FROM machine_5_spm_step4);
2017-03-07 11:00:01 EST [12759-1] epic@epic_ar_db ERROR:  relation "machine_5_spm_storage" does not exist at character 13
2017-03-07 11:00:01 EST [12759-2] epic@epic_ar_db STATEMENT:  INSERT INTO machine_5_spm_storage ( SELECT * FROM machine_5_spm_step4);

它试图 运行 触发器,但失败了,因为(不知何故)它引用了视图的原始名称和 table - 即使它不是那样写的。我对此完全不知所措。

截至 2017 年 3 月 7 日的更新 - 我删除了我创建的所有触发器。而且该脚本仍在尝试以某种方式 运行 。所以我想这是一个与最初意识到的不同的问题。即使没有触发器、没有函数也没有 运行ning 作业,脚本仍然失败并显示在日志中。

我无法删除数据库并从一个干净的模式开始,但是当我尝试删除并恢复原始数据(包含数据)以查看是否会重置 运行 时,我出现 port 5432 already in use 错误。

我不太确定如何解释它 - 但好像数据库 运行 出现了两次。在我删除数据库后,重新启动 pgadmin,数据库在那里但是是以前的版本。我(再次)使用最新数据进行了恢复,但后台不再有 "ghost trigger" 运行。