Transaktion bedingt abbrechen

Hallo,

ich möchte bei neuen Schematas der Datenbank. Diff Skripte in die Datenbank einpflegen.

In einem Diff-Skript wird die Revisionsnummer des Datenbankschemas in die Datenbank geschreiben.

Typischerweise sieht ein Diff Skript so aus:

BEGIN;

UPDATE variables SET value = '$Revision: 11003 $' WHERE "Id" = '1d034140-fc0d-4aa0-a3e6-4a7125deaa5f';    

COMMIT;

Nun würde ich gerne das Diff abbrechen lassen, falls die Revision nicht 11002, ist. Gibt es hier einen Weg?

Vielen Dank.

Ich weiß nicht, ob ich Dich richtig verstehe, aber vielleicht willst Du einen TRIGGER, der prüft, ob die alte Revision gleich der der neuen - 1 ist, und falls nicht, mit RAISE EXCEPTION den Rest abwürgen.

Andreas

Hallo,

leider geht das über einen Trigger nicht, da ich die letzte Revision nicht fix auf neueRev-1 setzen kann. Wir verwenden die Subversion Revsion des Datenbankschemas als Referenz.
Was ich brauche ist ein Diffskript in dem ich sagen kann auf welche Revision es anwendbar ist und welche Revision ich nach der Anwendung habe.

Gruß,
Tobias

Eine function, die das als Parameter bekommt, und bei Bedarf ein RAISE wirft?

Andreas

Hallo,

vielen Dank für den Tip mit der function. Hier meine Lösung:

CREATE TABLE difftest
(
  id character varying(20),
  "value" integer
);

INSERT INTO difftest VALUES ('revision', 100);

CREATE FUNCTION checkRevision(integer) RETURNS integer AS $$
DECLARE
    revision ALIAS FOR $1;
    currev integer;
BEGIN
    SELECT value INTO currev from difftest where id='revision';
    IF currev <> revision THEN
        RAISE EXCEPTION  'wrong db revision to apply this patch';
    END IF;
    RETURN revision;
END;$$ LANGUAGE plpgsql;

SELECT checkRevision(101);