Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id 8A65CB5DBFB for ; Sun, 9 Oct 2011 13:50:22 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 74186-06 for ; Sun, 9 Oct 2011 16:50:16 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0-rc2 Received: from smtp4-g21.free.fr (smtp4-g21.free.fr [212.27.42.4]) by mail.postgresql.org (Postfix) with ESMTP id 55A65B5DBE1 for ; Sun, 9 Oct 2011 13:50:12 -0300 (ADT) Received: from [192.168.0.62] (unknown [78.237.44.8]) by smtp4-g21.free.fr (Postfix) with ESMTP id 837BA4C82F7 for ; Sun, 9 Oct 2011 18:50:07 +0200 (CEST) Message-ID: <4E91D0BC.2030406@club-internet.fr> Date: Sun, 09 Oct 2011 18:50:04 +0200 From: "F. BROUARD / SQLpro" Organization: sqlpro.developpez.com User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: Re: [GENERAL] Creating rule for sliding data References: <4E917601.4040700@club-internet.fr> In-Reply-To: <4E917601.4040700@club-internet.fr> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.9 tagged_above=-5 required=5 tests=BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001 X-Spam-Level: X-Archive-Number: 201110/8 X-Sequence-Number: 35892 I am answering to myseilf... the good syntax is something like : CREATE RULE R_U_MSR_BEFORE2000x AS ON UPDATE TO T_MESURE_MSR WHERE ( NEW.MSR_DATE < DATE '2000-01-01' ) DO INSTEAD ( -- rows does not change partition : UPDATE T_MESURE_BEFORE2000_MSR SET MSR_ID = NEW.MSR_ID, MSR_DATE = NEW.MSR_DATE, MSR_MESURE = NEW.MSR_MESURE WHERE ( OLD.MSR_DATE < DATE '2000-01-01' ); -- rows does change partition (first INSERT NEWs then DELETE OLDs) INSERT INTO T_MESURE_MSR SELECT MSR_ID, MSR_DATE, MSR_MESURE FROM NEW WHERE NOT ( OLD.MSR_DATE < DATE '2000-01-01' ); ; DELETE FROM T_MESURE_MSR WHERE MSR_ID = OLD.MSR_ID AND MSR_DATE = OLD.MSR_DATE AND MSR_MESURE = OLD.MSR_MESURE AND NOT ( OLD.MSR_DATE < DATE '2000-01-01' ); ); The problem is nowhere in the doc there is a mention where much more than one commande must be place into brackets ! A + -- Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66 Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************