Postgres-将行移动到其他表中

问题描述 投票:0回答:2

使用postgres 11,我想自动将行从一个表移动到另一个表。我已经设置了查询,触发器功能和触发器,但是启用触发器后,我的测试插入失败并显示为“ 0 0”。

  • 要从中移动行的源表是'cmdb'
  • 将行移至的目标表是'cmdb_attic'
  • 条件是当列'mgmt_ip'='']时>
  • 整行应移动
  • 该表仅包含3列:“主机名”,“ mgmt_ip”,“ os_type”
  • 我具有的触发功能代码是:

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”中找到该行。

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

-用于创建和应用触发函数以及在pgAdmin4中触发的步骤

未列出的设置/选项卡未调整

  1. 表>触发函数>创建>触发函数
  2. 类型名称'move_to_attic'
  3. [代码标签:插入代码(来自原始帖子)
  4. 未调整其他选项/设置
  5. 表> cmdb>触发器>创建>触发器
  6. 类型名称'move_to_attic'
  7. [定义选项卡:启用触发器(是),行触发器(是),触发器功能public.move_to_attic
  8. 事件选项卡:在触发事件之前触发,插入事件
  9. [代码选项卡:我的触发功能代码已经存在
  10. SQL选项卡:只是说“-没有更新。”

使用postgres 11,我想自动将行从一个表移动到另一个表。我已经设置了查询,触发器功能和触发器,但是启用触发器时,我的测试插入失败,并带有“ 0 0”。...

postgresql postgresql-triggers
2个回答
0
投票

基本上我想将插入内容从cmdb重定向到满足该条件的cmdb_attic]


0
投票

怎么样:

© www.soinside.com 2019 - 2024. All rights reserved.