Search Postgresql Archives

Re: Creating a trigger function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ok, I have determined that i can't do:
  IF NEW IS NOT NULL  -- or -- IF OLD IS NOT NULL
and that is what is causing the error.

So, with this now known, is there a way to create a trigger & function that will allow inserts, updates, and deletes to occur while updating a field (mtime) in another table? At the same time, if an update takes place, it updates the modified time field (mtime) to the current time.

I can them all to work individually by modifying the function, but I cant get the to all work in the same function. Do I need to create a trigger for inserts/updates and another for deletes?

Any help is greatly appreciated. Thanks in advance.

If it helps, here are the table definitions:

CREATE TABLE journals (
id int NOT NULL DEFAULT nextval('journal_id_seq'::text),
owner_id int NOT NULL,
name varchar(15) NOT NULL,
descr varchar(50) NOT NULL,
ctime timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6),
mtime timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6),
CONSTRAINT journals_pkey PRIMARY KEY (id),
CONSTRAINT fkey_user_id FOREIGN KEY (owner_id) REFERENCES users (user_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT journal_descr CHECK descr::text <> ''::text,
CONSTRAINT journal_name CHECK name::text <> ''::text
);


CREATE TABLE journal_entries
(
id int NOT NULL DEFAULT nextval('journal_ent_id_seq'::text),
journ_id int NOT NULL,
entry varchar(1000) NOT NULL,
ctime timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6),
mtime timestamp NOT NULL DEFAULT ('now'::text)::timestamp(6),
CONSTRAINT journal_entries_pkey PRIMARY KEY (id),
CONSTRAINT fkey_journal_id FOREIGN KEY (journ_id) REFERENCES journals (id) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT entry_check CHECK entry::text <> ''::text
);



Peter Erickson wrote:
I am running postgresql 7.4.2 and having problems creating a trigger function properly. I keep getting the following error:

ERROR: OLD used in query that is not in rule

I have a table called journal_entries with a foreign key to a table called journals. When a entry is added to journal_entries, I am trying to get it to update the 'mtime' field of the corresponding entry in the journals table.

Can anyone help me with this problem? If you need more information, please let me know.

CREATE OR REPLACE FUNCTION public.update_journal_mtime()
  RETURNS trigger AS
'
  DECLARE
    curtime TIMESTAMP;
  BEGIN
    curtime := \'now\';
    IF OLD IS NOT NULL THEN
      UPDATE journals SET mtime = curtime WHERE id = OLD.journ_id;
    END IF;
    IF NEW IS NOT NULL THEN
      UPDATE journals SET mtime = curtime WHERE id = NEW.journ_id;
      UPDATE journal_entries SET mtime = curtime WHERE id = NEW.id;
    END IF;
    RETURN null;
  END;
'
  LANGUAGE 'plpgsql' VOLATILE;

CREATE TRIGGER update_mtime_trigger
  AFTER INSERT OR UPDATE OR DELETE
  ON public.journal_entries
  FOR EACH ROW
  EXECUTE PROCEDURE public.update_journal_mtime();

---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux