1

When attempting to delete a row, I get the following error:

record "new" is not assigned yet
DETAIL:  The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT:  PL/pgSQL function system_factmetrics_log_change_mv_a_iudt() line 3 at IF

Here is my function:

CREATE OR REPLACE FUNCTION system_factmetrics_log_change_mv_a_iudt() RETURNS TRIGGER
SECURITY DEFINER LANGUAGE plpgsql AS '
BEGIN
  IF NEW IS NULL THEN
    -- must be a DELETE, use OLD
    INSERT INTO system_dailystats_mv_pending_updates (date_id, creative_id, mv_updating, triggering_operation)
      VALUES (OLD.date_id, OLD.creative_id, false, TG_OP);
  ELSE
    INSERT INTO system_dailystats_mv_pending_updates (date_id, creative_id, mv_updating, triggering_operation)
      VALUES (NEW.date_id, NEW.creative_id, false, TG_OP);
  END IF;
  RETURN NULL;
END';

My trigger:

DROP TRIGGER IF EXISTS system_factmetrics_log_change_mv_it ON system_factmetrics;
CREATE TRIGGER system_factmetrics_log_change_mv_it AFTER INSERT OR UPDATE OR DELETE ON system_factmetrics
  FOR EACH ROW EXECUTE PROCEDURE system_factmetrics_log_change_mv_a_iudt(); 

Shouldn't my IF NEW IS NULL THEN conditional handle deletes adequately? According to the docs NEW should be NULL for DELETE triggers.

What am I missing?

The server is running Postgres 9.2.6.

1 Answer 1

1

Maybe something like this would work:

    IF (TG_OP = 'DELETE') THEN
        INSERT INTO system_dailystats_mv_pending_updates
            (date_id, creative_id, mv_updating, triggering_operation)
        VALUES (OLD.date_id, OLD.creative_id, false, TG_OP);
    ELSIF (TG_OP = 'UPDATE' or TG_OP = 'INSERT') THEN
        INSERT INTO system_dailystats_mv_pending_updates
            (date_id, creative_id, mv_updating, triggering_operation)
        VALUES (NEW.date_id, NEW.creative_id, false, TG_OP);
    END IF;
    RETURN NULL;

I don't think NEW is null in your case, I think it just doesn't exist. The docs say it is null for statement level triggers, yours is row level.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.