PL / pgSQL触发器表项限制

时间:2015-09-07 15:31:44

标签: postgresql plpgsql

我想就PostGreSQL PL/pgSQL数据库中为INSERT数据库撰写的触发器发表意见。我以前没有这样做过,希望得到更有经验的用户的建议。

任务很简单:

将表中的条目数减少到设定的数量。

会发生什么:

  • {@ 1}}进入表device_position,
  • 如果具有特定列(deviceid)值的条目数量超过50,则删除最旧的。
  • 重复

如果您发现任何明显的缺陷,请告诉我们:

CREATE OR REPLACE FUNCTION trim_device_positions() RETURNS trigger AS $trim_device_positions$
DECLARE
    devicePositionCount int;
    maxDevicePos CONSTANT int=50;
    aDeviceId device_position.id%TYPE;
    BEGIN
    SELECT count(*) INTO devicePositionCount FROM device_position WHERE device_position.deviceid=NEW.deviceid;
    IF devicePositionCount>maxDevicePos THEN
        FOR aDeviceId IN SELECT id FROM device_position WHERE device_position.deviceid=NEW.deviceid ORDER BY device_position.id ASC LIMIT devicePositionCount-maxDevicePos LOOP
            DELETE FROM device_position WHERE device_position.id=aDeviceId;
        END LOOP;       
    END IF;
        RETURN NULL;
    END;
$trim_device_positions$ LANGUAGE plpgsql;

DROP TRIGGER trim_device_positions_trigger ON device_position; 
CREATE TRIGGER trim_device_positions_trigger AFTER INSERT ON device_position FOR EACH ROW EXECUTE PROCEDURE trim_device_positions();

感谢我的任何智慧:)

0 个答案:

没有答案