Thread: INSERT RULE
Hi, I test a configuration where one table is divided in 256 sub-table. And I use a RULE to offer a single view to the data. For INSERT I have create 256 rules like: CREATE RULE ndicti_000 AS ON INSERT TO ndict WHERE (NEW.word_id & 255) = 000 DO INSTEAD INSERT INTO ndict_000 VALUES( NEW.url_id, 000, NEW.intag); CREATE RULE ndicti_001 AS ON INSERT TO ndict WHERE (NEW.word_id & 255) = 001 DO INSTEAD INSERT INTO ndict_001 VALUES( NEW.url_id, 001, NEW.intag); And that works, a bit slow. I try to do: CREATE RULE ndicti AS ON INSERT TO ndict DO INSTEAD INSERT INTO 'ndict_' || (NEW.word_id & 255) VALUES( NEW.url_id, NEW.word_id, NEW.intag); I got an error on 'ndict_' . I did not found the right syntax. Any help is welcomed. Cordialement, Jean-Gérard Pailloncy
> I try to do: > CREATE RULE ndicti AS ON INSERT TO ndict > DO INSTEAD INSERT INTO 'ndict_' || (NEW.word_id & 255) > VALUES( NEW.url_id, NEW.word_id, NEW.intag); > I got an error on 'ndict_' . > I did not found the right syntax. In fact I discover that SELECT * FROM / INSERT INTO table doesn't accept function that returns the name of the table as table, but only function that returns rows.... I'm dead. Does this feature, is possible or plan ? Is there a trick to do it ? Cordialement, Jean-Gérard Pailloncy
Pailloncy Jean-Gérard wrote: >> I try to do: >> CREATE RULE ndicti AS ON INSERT TO ndict >> DO INSTEAD INSERT INTO 'ndict_' || (NEW.word_id & 255) >> VALUES( NEW.url_id, NEW.word_id, NEW.intag); >> I got an error on 'ndict_' . >> I did not found the right syntax. > > In fact I discover that > SELECT * FROM / INSERT INTO table > doesn't accept function that returns the name of the table as table, but > only function that returns rows.... > > I'm dead. > > Does this feature, is possible or plan ? > Is there a trick to do it ? You could call a plpgsql function and inside that use EXECUTE (or use pltcl or some other interpreted language). Not sure what you're doing will help you much though. Are you aware that you can have partial indexes? CREATE INDEX i123 ON ndict WHERE (word_id & 255)=123; That might be what you're after, but it's difficult to be sure without knowing what problem you're trying to solve. -- Richard Huxton Archonet Ltd