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 