klar kann ich das :-)
Die Spalten ab "lagerbuchung_text" sind neu, also per "alter table" hinzugefügt - und jetzt:
Code:
matthias@lx-mh ~ $ psql -U lager -W -h server lager_dev
Passwort für Benutzer lager:
psql (8.4.9, Server 8.3.14)
WARNUNG: psql-Version 8.4, Serverversion 8.3.
Einige Features von psql werden eventuell nicht funktionieren.
Geben Sie »help« für Hilfe ein.
lager_dev=> \d lagerbuchung
Tabelle »public.lagerbuchung«
Spalte | Typ | Attribute
----------------------+--------------------------+----------------------------------------------------------------------------
lagerbuchung_id | bigint | not null Vorgabewert nextval('lagerbuchung_lagerbuchung_id_seq'::regclass)
lagerbuchung_datum | timestamp with time zone | not null
lagerbuchung_artikel | bigint | not null
lagerbuchung_menge | double precision | not null
lagerbuchung_text | character varying(50) |
active | boolean |
insby | bigint |
modby | bigint |
insdate | timestamp with time zone |
moddate | timestamp with time zone |
Indexe:
"lagerbuchung_pkey" PRIMARY KEY, btree (lagerbuchung_id)
Fremdschl�ssel-Constraints:
"lagerbuchung_artikel_fk" FOREIGN KEY (lagerbuchung_artikel) REFERENCES artikel(artikel_id)
Trigger:
bestand BEFORE INSERT OR DELETE OR UPDATE ON lagerbuchung FOR EACH ROW EXECUTE PROCEDURE bestand()
lager_dev=> select lagerbuchung_id,lagerbuchung_text,active from lagerbuchung where lagerbuchung_id=18;
lagerbuchung_id | lagerbuchung_text | active
-----------------+-------------------+--------
18 | |
(1 Zeile)
lager_dev=> update lagerbuchung set lagerbuchung_text='test', active=true where lagerbuchung_id=18;
UPDATE 1
lager_dev=> select lagerbuchung_id,lagerbuchung_text,active from lagerbuchung where lagerbuchung_id=18;
lagerbuchung_id | lagerbuchung_text | active
-----------------+-------------------+--------
18 | |
(1 Zeile) Und weil es da genau so ist gleich noch mal mit der 9.1.1:
Code:
matthias@lx-mh ~ $ psql -U lager -W -h 192.168.100.41 lager_dev
Passwort für Benutzer lager:
psql (8.4.9, Server 9.1.1)
WARNUNG: psql-Version 8.4, Serverversion 9.1.
Einige Features von psql werden eventuell nicht funktionieren.
SSL-Verbindung (Verschlüsselungsmethode: DHE-RSA-AES256-SHA, Bits: 256)
Geben Sie »help« für Hilfe ein.
lager_dev=> \d lagerbuchung
Tabelle »public.lagerbuchung«
Spalte | Typ | Attribute
----------------------+--------------------------+----------------------------------------------------------------------------
lagerbuchung_id | bigint | not null Vorgabewert nextval('lagerbuchung_lagerbuchung_id_seq'::regclass)
lagerbuchung_datum | timestamp with time zone | not null
lagerbuchung_artikel | bigint | not null
lagerbuchung_menge | double precision | not null
lagerbuchung_text | character varying(50) |
active | boolean |
insby | bigint |
modby | bigint |
insdate | timestamp with time zone |
moddate | timestamp with time zone |
Indexe:
"lagerbuchung_pkey" PRIMARY KEY, btree (lagerbuchung_id)
Fremdschlüssel-Constraints:
"lagerbuchung_artikel_fk" FOREIGN KEY (lagerbuchung_artikel) REFERENCES artikel(artikel_id)
Trigger:
bestand BEFORE INSERT OR DELETE OR UPDATE ON lagerbuchung FOR EACH ROW EXECUTE PROCEDURE bestand()
lager_dev=> select lagerbuchung_id,lagerbuchung_text,active from lagerbuchung where lagerbuchung_id=18;
lagerbuchung_id | lagerbuchung_text | active
-----------------+-------------------+--------
18 | |
(1 Zeile)
lager_dev=> update lagerbuchung set lagerbuchung_text='test', active=true where lagerbuchung_id=18;
UPDATE 1
lager_dev=> select lagerbuchung_id,lagerbuchung_text,active from lagerbuchung where lagerbuchung_id=18;
lagerbuchung_id | lagerbuchung_text | active
-----------------+-------------------+--------
18 | |
(1 Zeile) QED ... Ich mach so etwas immer zu und nur mit dieser EINEN Tabelle gibt es - warum auch immer - Probleme.
Dder Vollständigkeit halber:
Code:
CREATE OR REPLACE FUNCTION "public"."bestand" () RETURNS trigger
VOLATILE
AS $dbvis$
BEGIN
IF (TG_OP = 'DELETE') THEN
update artikel set artikel_bestand = artikel_bestand - OLD.lagerbuchung_menge where artikel_id = OLD.lagerbuchung_artikel;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
update artikel set artikel_bestand = artikel_bestand - OLD.lagerbuchung_menge + NEW.lagerbuchung_menge where artikel_id = OLD.lagerbuchung_artikel;
RETURN OLD;
ELSIF (TG_OP = 'INSERT') THEN
IF NEW.lagerbuchung_menge IS NULL THEN
RAISE EXCEPTION 'menge cannot be null';
END IF;
update artikel set artikel_bestand = artikel_bestand + NEW.lagerbuchung_menge where artikel_id = NEW.lagerbuchung_artikel;
RETURN NEW;
END IF;
END;
$dbvis$ LANGUAGE plpgsql
Lesezeichen