I was thinking of trying something like the following to automatically delete
rows from tables that reference large objects when the large object is
unlinked.  It would depend on pg_class having a PRIMARY key (on the hidden
'oid' column in this possible example):

-- this is a generic table to just hold large objects
CREATE TABLE lobjs (
        id              SERIAL  CONSTRAINT lobjs_id_con
                PRIMARY KEY,
                -- other tables referencing this would also react.
        lo_oid          OID     CONSTRAINT lobjs_lo_oid_con NOT NULL,
                -- holds an actual large object id.
        lo_ref_oid      OID     CONSTRAINT lobjs_lo_ref_oid_con
                        REFERENCES pg_class
                        ON UPDATE CASCADE
                        ON DELETE CASCADE
                        INITIALLY DEFERRED
);

CREATE RULE set_lo_ref_oid AS
        ON INSERT TO lobjs
        DO
                UPDATE lobjs
                SET lo_ref_oid = pg_class.oid
                FROM pg_class
                WHERE pg_class.relname = "xinx" || new.lo_oid;

Something like that (I'd have to check this sql to make sure its right). I don't
think there is a primary key on the system tables.  I wonder if it would cause
problems if there where?

Anyway, does anyone know of a way to accomplish something like what I am trying
to do with the large objects?

-- 
Robert B. Easter
[EMAIL PROTECTED]

Reply via email to