Thread: Inheritance and DELETE
Hi, to represent objects of a filesystem I am using these tables: --------------------- CREATE TABLE fsObject -- an abstract filesystem-object ( fsOid serial, name text NOT NULL, parent int -- a directoryid ); CREATE TABLE files ( ) INHERITS (fsObject); CREATE TABLE directory -- can be the parent of a fsObject ( ) INHERITS (fsObject); ---------------------- Because chapter 9 (Inheritance) of the "User Guide" the documentation is saying "Many of the commands that we have already discussed -- select, update and *delete* -- support this "*" notation...", I tried to handle the deletion of a directory with this rule: ---------------------- CREATE RULE chg_fsO_on_dir_delete AS ON DELETE TO directory DO DELETE FROM fsObject* WHERE parent = OLD.fsOid; ---------------------- But PostgreSQL is complaining with the message 'ERROR: parser: parse error at or near "*"' What is to correct syntax for the "*" in a DELETE-statement? Enrico -- eMail: enrico.scholz@wirtschaft.tu-chemnitz.de talk: ensc@ultra.csn.tu-chemnitz.de
Enrico.Scholz@informatik.tu-chemnitz.de writes: > CREATE RULE chg_fsO_on_dir_delete AS ON DELETE > TO directory > DO DELETE FROM fsObject* WHERE parent = OLD.fsOid; > But PostgreSQL is complaining with the message > 'ERROR: parser: parse error at or near "*"' Hmm. It looks like the grammar is set up to require a simple relation_name, rather than a relation_expr which would accept *, in DELETE statements. I think this is a bug --- I know no reason that DELETE wouldn't work as an inherited operation. Looks like the fix will take more than a one-line change, though. UPDATE doesn't look like it wants to deal with multiple targets either... regards, tom lane
> Enrico.Scholz@informatik.tu-chemnitz.de writes: > > CREATE RULE chg_fsO_on_dir_delete AS ON DELETE > > TO directory > > DO DELETE FROM fsObject* WHERE parent = OLD.fsOid; > > > But PostgreSQL is complaining with the message > > 'ERROR: parser: parse error at or near "*"' > > Hmm. It looks like the grammar is set up to require a simple > relation_name, rather than a relation_expr which would accept *, > in DELETE statements. I think this is a bug --- I know no reason > that DELETE wouldn't work as an inherited operation. Looks like > the fix will take more than a one-line change, though. > > UPDATE doesn't look like it wants to deal with multiple targets > either... Added to TODO list: * Allow DELETE and UPDATE to use inheritance using tablename* -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026