<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Trigger AFTER INSERT, porównywanie danych z tabeli]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=485&amp;type=atom"/>
	<updated>2010-09-08T10:59:12Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=485</id>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger AFTER INSERT, porównywanie danych z tabeli]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2199#p2199"/>
			<content type="html"><![CDATA[Trigger
[code]
CREATE TRIGGER icmphdr_insert
AFTER INSERT OR UPDATE  ON tcphdr  FOR EACH ROW EXECUTE PROCEDURE tcphdr_procedure();
[/code]

A że rigger się w ogóle wywołuje wiem stąd, 
że, testowo dodałem przed selectem w ciele funkcji

[code]
RAISE NOTICE 'trigger dla wartosci %', NEW.cid;
[/code]

i otrzymywałem taki debug na konsoli.]]></content>
			<author>
				<name><![CDATA[atalin]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1148</uri>
			</author>
			<updated>2010-09-08T10:59:12Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2199#p2199</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger AFTER INSERT, porównywanie danych z tabeli]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2198#p2198"/>
			<content type="html"><![CDATA[A gdzie definicja triggera, bo to co podałeś to definicja funkcji? Skąd wiesz że trigger się wywołuje?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-09-06T20:58:08Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2198#p2198</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Trigger AFTER INSERT, porównywanie danych z tabeli]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2197#p2197"/>
			<content type="html"><![CDATA[Witam,

Chciałbym przy pomocy Funkcji oraz Triggerów uzyskać następującą funkcjonalność.

Aplikacja A wstawia dane wrzucając wszystko do kilku tabel(iphdr,tcphdr etc).  Aplikacja B wrzuca swoje dane do tabeli [b]polaczenia[/b]. Aplikacje działają niezależnie. Ja natomiast chcę aby w momencie INSERT'a do tcphdr zostało sprawdzone, czy podobne dane znajdują się w tabeli połączenia. Niestety kryterium jednoznaczności można sprawdzić przeglądając tabele tcphdr oraz iphdr. Stworzyłem więc widok, który łączy obie tabele iphdr oraz tcphdr. Następnie stworzyłem triggera wykonywanego po INSERCIE do tabeli tcphdr który wygląda tak:

[code]

CREATE OR REPLACE FUNCTION tcphdr_procedure()
  RETURNS trigger AS
$BODY$
DECLARE 
result BIGINT;
counter INTEGER;

    BEGIN
        
        IF (TG_OP= 'INSERT') THEN
        SELECT connections.id INTO result FROM connections,tcp_connections WHERE
    tcp_connections.cid = NEW.cid AND tcp_connections.src_ip=connections.src_addr 
    AND tcp_connections.dst_ip=connections.dst_addr 
    AND tcp_connections.src_port = connections.src_port 
    AND tcp_connections.tcp_dport = connections.dst_port;
        
        IF FOUND THEN
            INSERT INTO test_new  VALUES(result);
            RETURN NULL;
        END IF;

    END IF;
       
        
        RETURN NULL; -- result is ignored since this is an AFTER trigger
    END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

[/code]

W chwili kiedy insertuję dane do tabel tcphdr etc. wywołuje się trigger, jednak nie znajduje odpowiednich złączeń z danymi w tabeli connections. W momencie kiedy wykonam sobie selecta już po insercie (bez triggera, po prostu z palca) - wszystko gra. Odpowiednie dane są znajdowane.

Dodam, że tabele

connections - TABELA
tcp_connections - widok.

Jak mogę zrobić, zeby wstawiane dane (już wstawione) były porównywane z danymi z innej tabeli, bo w/w sposób nie działa do końca dobrze.]]></content>
			<author>
				<name><![CDATA[atalin]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1148</uri>
			</author>
			<updated>2010-09-06T12:06:34Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2197#p2197</id>
		</entry>
</feed>
