Fehlermeldung: query returned more than one row

Hallo,

Bin neu hier und habe gleichmal ein Problem :astonished: Es geht um eine Datenbank, die ähnlich eines sozialen Netzwerkes funktionieren soll. Nun möchte ich eine Funktion schreiben, die etwas in eine neue Tabelle schreibt, falls sich der Freundschaftsgrad zwischen Nutzern ändert. Das sind die betreffenden Tabellen:

create table freundschaftslog (
befreundetmit integer references freunde(freundid) not null,
freundvon integer references freunde(freundid) not null,
tag timestamp,
grad_alt integer check (grad_alt between 0 and 10) not null,
grad_neu integer check (grad_neu between -1 and 10) not null);



create table istbefreundetmit(
befreundetmit integer references Freunde(FreundID) on delete cascade,
freundVon integer references freunde(freundid) on delete cascade,
freundschaftsgrad integer check (freundschaftsgrad between 0 and 10));

Was ich bisher als Funktion geschrieben habe ist folgendes:

CREATE OR REPLACE FUNCTION check_freundschaftsgrad() RETURNS TRIGGER AS $freundschaftsgrad$
DECLARE
new_freundschaftsgrad varchar;
old_freundschaftsgrad varchar;
befreundetmit varchar;
BEGIN IF(TG_OP=‘UPDATE’) THEN
befreundetmit := befreundetmit FROM istbefreundetmit;
INSERT INTO freundschaftslog(befrmit,frvon,tag,grad_alt,grad_neu) VALUES (befreundetmit,freundvon,now(),OLD.freundschaftsgrad,NEW.freundschaftsgrad);
END IF;
RETURN NEW;
END;
$freundschaftsgrad$ LANGUAGE plpgsql;

CREATE TRIGGER log_freundschaftsgrad AFTER UPDATE ON istbefreundetmit FOR EACH ROW EXECUTE PROCEDURE check_freundschaftsgrad();

soweit funktioniert alles (trigger und funktion werden erstellt), nur wenn ich den freundschaftsgrad update kommt folgende fehlermeldung:

query “SELECT $1 FROM istbefreundetmit” returned more than one row


Was könnte das Problem sein?
Ich bin ziemlicher Neuling und entschuldige mich schonmal im voraus, falls es irgend ein dummer Fehler ist.

Schonmal vielen Dank!

Nun, das Problem ist offensichtlich, das deine Anfrage mehr als eine Ergebniszeile findet.

Wie lässt sich das Problem lösen? Das liegt bei dir.

  • Du könntest einen Unique Index anlegen, der das verhindert.
  • Du könntest schauen, welche Zeilen alles gefunden werden - und ob das die richtigen Ergebnisse sind.
  • Du könntest LIMIT 1 verwenden.