使用postgres 11,我想自动将行从一个表移动到另一个表。我已经设置了查询,触发器功能和触发器,但是启用触发器后,我的测试插入失败并显示为“ 0 0”。
我具有的触发功能代码是:
BEGIN WITH moved_rows AS ( DELETE FROM cmdb WHERE mgmt_ip='' RETURNING * ) INSERT INTO cmdb_attic SELECT * FROM moved_rows; RETURN NULL; END;
我在'cmdb'表下定义了一个触发器,该触发器在事件插入之前触发。
当我对表'cmdb'进行测试插入时,我没有收到任何错误消息,并且没有任何内容插入-到任一表中。
编辑1
-从pgsql触发详细信息-测试插入并选择inv_net=# select * from pg_trigger; tgrelid | tgname | tgfoid | tgtype | tgenabled | tgisinternal | tgconstrrelid | tgconstrindid | tgconstraint | tgdeferrable | tginitdeferred | tgnargs | tgattr | tgargs | tgqual | tgoldtable | tgnewtable ---------+---------------+--------+--------+-----------+--------------+---------------+---------------+--------------+--------------+----------------+---------+--------+--------+--------+------------+------------ 24623 | move_to_attic | 24618 | 7 | O | f | 0 | 0 | 0 | f | f | 0 | | \x | | | (1 row)
EDIT 2
启用触发器后,下面是我得到的。如果禁用触发器,则我的插入有效,并且可以在“ cmdb”中找到该行。
-用于创建和应用触发函数以及在pgAdmin4中触发的步骤inv_net=# INSERT INTO cmdb(hostname, mgmt_ip, os_type) VALUES ('testdevice', '', 'ios'); INSERT 0 0 inv_net=# select * from cmdb where hostname='testdevice'; hostname | mgmt_ip | os_type ----------+---------+--------- (0 rows) inv_net=# select * from cmdb_attic where hostname='testdevice'; hostname | mgmt_ip | os_type ----------+---------+--------- (0 rows)
EDIT 3
未列出的设置/选项卡未调整
使用postgres 11,我想自动将行从一个表移动到另一个表。我已经设置了查询,触发器功能和触发器,但是启用触发器时,我的测试插入失败,并带有“ 0 0”。...
基本上我想将插入内容从cmdb重定向到满足该条件的cmdb_attic]
怎么样: