Hallo Leute,
bisher habe ich über externe Aufrufe durch jobs bestimmte Aktualisierungsabfragen durchgeführt.
Nun muß ich direkt in der Datenbank durch Trigger/Funktionen mein Problem lösen
Bin in diesem Thema ein newbie
Aus dem Doku werde ich nicht schlau
Benötige Codebeispiele - Idealerweise den Code zu meinem Problem
Danke im voraus
Tabelle "macs"
CREATE TABLE macs (
mac macaddr NOT NULL,
time_first timestamp without time zone,
time_last timestamp without time zone,
scandatum date[],
CONSTRAINT macs_pkey PRIMARY KEY (mac)
)
WITHOUT OIDS;
View qry_macs, das aus einem anderen Tabelle Werte zusammenfasst
CREATE OR REPLACE VIEW qry_macs AS
SELECT node.mac, min(node.time_first) AS time_first
FROM node
GROUP BY node.mac;
Mit folgendem Code ermittle ich die neue Adressen aus dem View qry_macs und ergänze die Macs in die Tabelle macs.
insert into macs (mac,time_first)
SELECT node.mac, min(node.time_first)
FROM node LEFT JOIN macs ON node.mac = macs.mac
WHERE macs.mac Is Null
group by node.mac;
Nun, den SQL-Code kennst Du ja schon. Daraus machst Du eine Funktion. Diese soll immer dann laufen, wenn in der Tabelle 'node' ein neuer Eintrag reinkommt, richtig? Also brauchst einen AFTER INSERT - Trigger für diese Tabelle.
Was genau hast Du versucht, was ist passiert? Fehlermeldungen?
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ich glaube, da werden noch LISTEN und NOTIFY gesucht *grübel*
Aber für Code Beispiele stelle ich normalerweise eine Rechnung ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Hallo akretschmer,
genau das ist mein problem.
Ich möchte ein after Trigger erstellen, der eine Funktion aufruft.
Der Funktion soll dann den 3. Code ausführen (Also neue Macs in die Tabelle macs hinzufügen).
Ich habe pgadmin III Version 1.10.0 installiert um die Datenbank zu administrieren.
Folgende Funktion habe ich geschrieben:
CREATE OR REPLACE FUNCTION new_mac()
RETURNS void AS
'insert into macs (mac,time_first)
SELECT node.mac, min(node.time_first)
FROM node LEFT JOIN macs ON node.mac = macs.mac
WHERE macs.mac Is Null
group by node.mac;'
LANGUAGE 'sql' VOLATILE;
Die Funktion kann ich per select aufrufen : select new_mac();
Folgende Trigger funktioniert nicht:
CREATE TRIGGER new_mac AFTER INSERT ON node
FOR EACH ROW EXECUTE PROCEDURE new_mac();
FEHLER: Funktion new_mac muss Typ »trigger« zurückgeben
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hmmm ?
CREATE OR REPLACE FUNCTION new_mac()
RETURNS TRIGGER AS
'insert into macs (mac,time_first)
SELECT node.mac, min(node.time_first)
FROM node LEFT JOIN macs ON node.mac = macs.mac
WHERE macs.mac Is Null
group by node.mac;'
LANGUAGE 'pl/pgsql' VOLATILE;
FEHLER: Sprache »pl/pgsql« existiert nicht
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Ich denke, ich habs hingekriegt
Vielen dank für die Unterstützung
Code:CREATE TRIGGER tr_new_mac AFTER INSERT ON node FOR EACH ROW EXECUTE PROCEDURE new_mac();Code:CREATE OR REPLACE FUNCTION new_mac() RETURNS "trigger" AS 'insert into macs (mac,time_first) SELECT node.mac, min(node.time_first) FROM node LEFT JOIN macs ON node.mac = macs.mac WHERE macs.mac Is Null group by node.mac;' LANGUAGE 'plpgsql' VOLATILE;
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen