<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Log dla tabeli?]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=67&amp;type=atom"/>
	<updated>2008-08-13T12:58:41Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=67</id>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=239#p239"/>
			<content type="html"><![CDATA[Dziękuję :)
wziąłem w łapkę książkę PostgreSQL autorstwa Jeff Perkins-a ... ale na temat funkcji trigger było niewiele opisane (całej książki jeszcze nie przeczytałem) =) Więc dziękuję ... na razie to będzie wszystko ... ale przypuszczam że będę mieć jeszcze dużo innych problemów :)) ... w przyszłości 

Dziękuję i Pozdrawiam :)]]></content>
			<author>
				<name><![CDATA[kicaj]]></name>
				<email><![CDATA[krol@hiacynt.wimbp.lodz.pl]]></email>
				<uri>https://forum.postgresql.org.pl/profile.php?id=107</uri>
			</author>
			<updated>2008-08-13T12:58:41Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=239#p239</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=238#p238"/>
			<content type="html"><![CDATA[Cześć,

pomyślałem sobie, że Tobie pomogę :)

z tego co napisałeś Twoja tabelka USERS funkcjonuje tak, że gdy ktoś się loguje jest dodawany rekord z jego loginem, gdy się wylogowuje jest usuwany rekord z jego loginem- czyli w danym momencie przechowuje loginy tylko zalogowanych. Dlatego wyobrażam sobie tą tabelkę mniej więcej tak, że posiada ona przynajmniej kolumnę LOGIN. Pozostałe kolumny mnie nie interesują. Przyjąłem, że LOGIN jest mniejszy równy rozmiarowi VARCHAR(100).

Oto moja propozycja dla Ciebie. Nie gwarantuje, że zadziałą od razu, bo pisałem ją w okienku notatnika. KOLEJNOŚĆ JEST ISTOTNA!!!


--Tworzenie tabelek
CREATE TABLE T_LOGI_NAG  (ID_LONA NUMERIC(16) NOT NULL, LOG_DATA DATE NOT NULL DEFAULT CURRENT_DATE) ;

CREATE TABLE T_LOGI_TAB  (ID_LOTA NUMERIC(16), ID_LONA NUMERIC(16) NOT NULL, LOGIN VARCHAR(100) NOT NULL) ;


--Tworzenie sekwencji
CREATE SEQUENCE S_LONA
 INCREMENT BY 1
 START WITH 1
 MAXVALUE 999999999999999999
 MINVALUE 1
;


CREATE SEQUENCE S_LOTA
 INCREMENT BY 1
 START WITH 1
 MAXVALUE 999999999999999999
 MINVALUE 1
;


--Tworzenie funkcji, ktora bedzie wywolywana przez triggera na tabeli USERS. Wlasnie ta funkcja odwala glowna robote!
CREATE OR REPLACE FUNCTION f_trg_user_afid()
  RETURNS opaque AS '
  DECLARE
     n_ID_LONA NUMERIC(16);
  BEGIN
    n_ID_LONA := nextval(''S_LONA'');

    INSERT INTO T_LOGI_NAG (ID_LONA) VALUES (n_ID_LONA);
 
    INSERT INTO T_LOGI_TAB (ID_LOTA, ID_LONA, LOGIN)
           SELECT nextval(''S_LOTA''), n_ID_LONA, LOGIN
             FROM USERS;

    RETURN NULL;
  END;
  ' LANGUAGE 'plpgsql';


--Tworzenie triggera (po polsku "wyzwalacza"), ktory wywoluje wczesniej zadeklarowana funkcje
CREATE TRIGGER trg_user_afid
  AFTER INSERT OR DELETE
  ON USERS
  FOR EACH ROW
  EXECUTE PROCEDURE f_trg_user_afid();


.OK, to tyle

pozdrawiam ;)]]></content>
			<author>
				<name><![CDATA[trick487]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=200</uri>
			</author>
			<updated>2008-08-13T09:18:37Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=238#p238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=237#p237"/>
			<content type="html"><![CDATA[trigger to nie funkcja tylko wyzwalacz-cos co pozwala wykonac jakies operacje (wywolac jakas funkcje) pod wplywem innej operacji tzn. np:
robisz sobie jakas funkcje  F i chcesz zeby po wykonaniu np operacj insert na tabeli T ta funkcja zostala wykonana, aby to zrobic definiujesz trigger na tabeli T, mowisz ze trigger ma byc uruchamiany przez Insert i ma wykonywac funkcje F. 
A najlepiej to sobie poczytaj manual na postgresql.org]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2008-08-13T07:09:16Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=237#p237</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=236#p236"/>
			<content type="html"><![CDATA[Rozwiązanie rozumiem. Natomiast nieco brakuje mi umiejętności :( ... ewentualnie możecie mi polecić jakiś tutorial jak działa funkcja trigger lub ewentualnie jakąś dobrą książkę gdzie jest to jasno i płynie opisane (chodzi mi głównie o składnię polecenia dalej jakoś sobie poradzę ... chyba :) )]]></content>
			<author>
				<name><![CDATA[kicaj]]></name>
				<email><![CDATA[krol@hiacynt.wimbp.lodz.pl]]></email>
				<uri>https://forum.postgresql.org.pl/profile.php?id=107</uri>
			</author>
			<updated>2008-08-13T06:15:17Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=236#p236</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=231#p231"/>
			<content type="html"><![CDATA[Cześć,

Zgadzam się z RSKI: najlepiej tabela i trigger, który będzie obsługiwał całość.

Ja proponowałbym następujące rozwiązanie:
Dwie tabele T_LOGI_NAG <- będą przechowywane nagłówki, tzn. godzina logu i ID tej tabeli
                  T_LOGI_TAB <- będzie przechowywać listę użytkowników zalogowanych na daną godzinę, będzie posiadać swój własny ID oraz ID z tabeli T_LOGI_NAG 

będą potrzebne 2 sekwencje, dla każdej z tych tabel

oraz jeden lub dwa triggery na Twojej Tabelce USERS

Działeanie:
  użytkownik loguje się, wstawia się rekord do USERS odpala się trigger, który zapisuje datę do T_LOGI_NAG i aktualną listę userów do T_LOGI_TAB

  użytkownik się wylogowuje, usuwany jest rekord z USERS odpala się trigger, który zapisuje datę do T_LOGI_NAG i aktualną listę użytkowników do T_LOGI_TAB

czy coś takiego Ciebie satysfakcjonuje?
  jeśli tak, czy wiesz jak to zrobić?

pozdrawiam :)]]></content>
			<author>
				<name><![CDATA[trick487]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=200</uri>
			</author>
			<updated>2008-08-12T11:16:38Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=231#p231</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=229#p229"/>
			<content type="html"><![CDATA[Trochę tak ale nie do końca. mniej więcej rozumiem jak to ma wyglądać. (Tworzę tabelę i okresowo np. co 5 minut zrzucam ją do pliku). Natomiast gorzej jest jeżeli chodzi o pierwszą część. Bo nie bardzo wiem jak się za to zabrać w postgresie :(]]></content>
			<author>
				<name><![CDATA[kicaj]]></name>
				<email><![CDATA[krol@hiacynt.wimbp.lodz.pl]]></email>
				<uri>https://forum.postgresql.org.pl/profile.php?id=107</uri>
			</author>
			<updated>2008-08-12T08:46:26Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=229#p229</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=228#p228"/>
			<content type="html"><![CDATA[Pewne bedziesz potrzebowal triggera na tabeli users. Ale trigger bedzie musial wykorzystywac funkcje w jakims jezyku niezaufanym, bo jezyki zaufane raczej nie maja dostepu do systemu plikow. Latwiej bedzie zapisywac te zmiany w jakiejs tabeli (przy uzyciu triggera i np funkcji plpgsql) i okresowo zrzucac tabele do pliku. Czy to ci troche rozjasnilo sytuacje?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2008-08-12T07:48:03Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=228#p228</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Log dla tabeli?]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=227#p227"/>
			<content type="html"><![CDATA[Witam

Mam oto taki problem mam bazę danych w której jest tabela users zawiera ona użytkowników którzy są zalogowani do mojego serwera. Ta tabela zmienia się dynamicznie (czyli jeżeli ktoś się zalogował do systemu to automatycznie jest zapisywany w tej tabeli a gdy kończy pracę jest on automatycznie usuwany z tej tabeli).

Chcę aby postgres każdorazowo gdy nastąpi zmiana w tej tabeli zapisywał mi te zmiany (nową aktualną listę użytkowników) w jakimś pliku np. zmiany_000x.log (chodzi mi o tworzenie logu).

Jak zrobić coś takiego?

Pozdrawiam i liczę na odpowiedź :)]]></content>
			<author>
				<name><![CDATA[kicaj]]></name>
				<email><![CDATA[krol@hiacynt.wimbp.lodz.pl]]></email>
				<uri>https://forum.postgresql.org.pl/profile.php?id=107</uri>
			</author>
			<updated>2008-08-12T06:37:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=227#p227</id>
		</entry>
</feed>
