INSERT eine Zahl in einer Spalte basierend auf anderen Spalten OLD INSERTs

In PostgreSQL habe ich diese Tabelle ... (Es gibt einen Primärschlüssel auf der linken Seite "timestamp02", der in diesem Bild nicht gezeigt wird. Bitte nicht stören, es ist nicht wichtig für den Zweck dieser Frage.)

in der obigen Tabelle werden alle Spalten über Abfragen eingegeben, mit Ausnahme des "time_index", der bei jeder Zeilenfüllung automatisch über einen Trigger gefüllt werden soll.

Dies ist der Code zum Erstellen derselben Tabelle (ohne Wert), sodass jeder sie mithilfe des Postgre SQL-Abfragefensters erstellen kann.

CREATE TABLE table_ebscb_spa_log02
(
  pcnum smallint,
  timestamp02 timestamp with time zone NOT NULL DEFAULT now(),
  fn_name character varying,
  "time" time without time zone,
  time_elapse character varying,
  time_type character varying,
  time_index real,
  CONSTRAINT table_ebscb_spa_log02_pkey PRIMARY KEY (timestamp02)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE table_ebscb_spa_log02
  OWNER TO postgres;

Was ich möchte, ist der Trigger:

INSERT eine Zahl in der Spalte "time_index" basierend auf den INSERT-Werten der Spalten "fn_name" und "time_type" in jeder Zeile.

Wenn beide ("fn_name" und "time_type") eine Kombination (z. B. Check Mails - Start) ausführen, die in keiner Zeile zuvor (oben) vorhanden ist, dann INSERT 1 in der Spalte "time_index",

Elif beide ("fn_name" und "time_type") führen eine Kombination aus, die in einer Zeile vor (oben) vorhanden ist, und fügen Sie dann die Zahl nach der vor (oben) in die Spalte "time_index" ein.

(Bitte sehen Sie sich das Bild der Beispieltabelle an. Dieser Trigger erzeugt jedes rot hervorgehobene Quadrat darauf.)

Ich habe viele PostgreSQL-Lernvideos angesehen und viele Handbücher gelesen, einschließlich dieser

http: //www.postgresql.org/docs/9.4/static/sql-createtrigger.htm http: //www.postgresql.org/docs/9.4/static/plpgsql-trigger.htm

ohne Ergebnis.

Ich habe bisher versucht, diese Funktion zu erstellen:

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $
DECLARE
t_ix real;
n int;

BEGIN
IF NEW.time_type = 'Start' THEN
    SELECT t.time_index FROM table_ebscb_spa_log02 t WHERE t.fn_name = NEW.fn_name AND t.time_type = 'Start' ORDER BY t.timestamp02 DESC LIMIT 1 INTO t_ix;
      GET DIAGNOSTICS n = ROW_COUNT;
        IF (n = 0) THEN 
        t_ix = 1;
        ELSE 
        t_ix = t_ix + 1;
        END IF;
END IF;
NEW.time_index = t_ix;
return NEW;
END
$
LANGUAGE plpgsql;

Und dies, um die Abfrage zu erstellen:

CREATE TRIGGER on_ai_myTable
    AFTER INSERT ON table_ebscb_spa_log02
    FOR EACH ROW
    EXECUTE PROCEDURE on_ai_myTable();

Wenn ich dann die Werte manuell in die Tabelle einfüge, bleibt die Spalte time_index leer (keine Fehlermeldung). Was mache ich falsc

Bitte, ein guter PostgreSQL-Programmierkollege könnte mir helfen. Ich bin bei dieser Aufgabe wirklich zum Tode gekommen. Ich habe noch weitere Ideen.

Danke im Vorau

Antworten auf die Frage(2)

Ihre Antwort auf die Frage