Обсуждение: Inheritance and DELETE

Поиск
Список
Период
Сортировка

Inheritance and DELETE

От
Enrico.Scholz@informatik.tu-chemnitz.de
Дата:
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



Re: [SQL] Inheritance and DELETE

От
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...
        regards, tom lane


Re: [SQL] Inheritance and DELETE

От
Bruce Momjian
Дата:
> 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