已删除 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" 运行。
我什至不确定从哪里开始探索这个。
我有一个 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" 运行。