Ich hab versucht die Funktion im Debugger durchlaufen zu lassen. Dabei kam der Fehler.
Hier ist die komplette Funktion:
CREATE OR REPLACE FUNCTION tm_match2("input" character varying, out x character varying)
RETURNS SETOF record AS
$BODY$
DECLARE
NORM norm;
rec RECORD;
BEGIN
-- Normalisierung
NORM := tm_normalize(input);
-- Free Text Search
FOR rec IN SELECT street FROM address WHERE street = norm.strasse LOOP
RETURN NEXT;
END LOOP;
RETURN;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION tm_match2(character varying) OWNER TO postgres;
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Aufruf via:
SELECT DISTINCT * FROM tm_match2('Inputstring') AS (street VARCHAR);
Das funktioniert wunderbar.
Doch wenn ich versuche die selbe Funktion (tm_match2) im Debugger von EnterpriseDB durchlaufen zu lassen,
kommt bei 'RETURN NEXT rec' die erwähnte Fehlermeldung.
Das versteh ich nicht ganz.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Sorry mein Fehler.
Der Befehl lautet 'RETURN NEXT rec;'
Das Problem ist folgendermassen:
Wenn via Aufruf
SELECT DISTINCT * FROM tm_match2('Inputstring') AS (street VARCHAR);
die Funktion tm_match2 aufgerufen wird, erhalt ich die gewünschten Resultate.
Wenn ich jedoch via Debugger step by step versuche die Funktion durchzuführen, kommt beim Befehl 'RETURN NEXT rec' die beschriebene Fehlermeldung.
Ist beim Debugger-Aufruf auch das "AS (...)" dabei?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Ja.
Der aktuelle Befehl in der Funktion lautet:
PERFORM set_limit(sim_minimum_street);
FOR rec IN SELECT street, similarity(norm.strasse, street) AS sim
FROM address WHERE street % norm.strasse
ORDER BY sim DESC
LIMIT 5
LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
Das Problem ist, dass ich schon länger Schwierigkeiten mit dem DBEnterprise Debugger habe (Siehe Problem mit Pl/pgSQL Debugger).
Aber ich hätte sonst noch eine weitere völlig andere Frage, bei der ihr mir weiterhelfen könntet.
Und zwar will ich für meine Adresstabelle für jede Spalte einen GIN und einen GIST-Index kreieren. Um die Performace für unterschiedliche Abfragen zu testen.
CREATE INDEX address_city_gin
ON address
USING gin
(city gin_trgm_ops);
Die Frage ist bezüglich den Operatorklassen gin_trgm_ops. Was genau bewirkt die?
Und gibt es noch andere mögliche Operatorenklassen?
Hab leider nichts gefunden in der Doku.
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen