Problem mit pl/pgsql Debugger

Seit längerem hab ich ein Problem mit dem pgAdmin Debugger. Bei gewissen Funktionen ist er ohne weiteres anwendbar, bei anderen kommt stets die selbe Fehlermeldung mit der ich leider nichts anfangen kann.
Die Funktionen die ich verwende sind nicht selbst geschrieben (Tiger/Line Geocoder Funktionen).

Fehlermeldung:

An error has occurred:
FEHLER: Funktion tiger.geocode(character vaying, norm_addy, geometry, integer) existiert nicht
LINE 1: SELECT*FROM tiger.geocode(‘2 Alder Creek Road Beaverhead MT 59762’)
HINT: Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.

Ich versteh leider nicht weshalb die Funktion nicht exsistieren sollte???

Hier die ersten Zeilen des Codes:

CREATE OR REPLACE FUNCTION tiger.geocode(IN “input” character varying, OUT addy norm_addy, OUT geomout geometry, OUT rating integer)

RETURNS SETOF record AS
$BODY$
DECLARE
rec RECORD;
BEGIN

IF input IS NULL THEN
RETURN;
END IF;

– Pass the input string into the address normalizer
ADDY := normalize_address(input);
IF NOT ADDY.parsed THEN
RETURN;
END IF;

usw…

Das komische ist, dass die Funktion normalize_address(input) die verwendet wird, mit dem Debugger ohne Probleme funktioniert.

Ich hoff jemand kann mir dabei helfen.

Du rufst die Funktion irgendwo mit 4 Parametern auf, sie erwartet aber nur einen Parameter.

Andreas

Die Funktion die aufgerufen wird ist: geocode(character varving)
Für character varying wird ein Addressstring eingegeben.

In der Funktion:
tiger.geocoder(IN “input” character varying, OUT addy norm_addy, OUT geomout geometry, OUT rating integer)

Das sollte ja soweit übereinstimmen.

Die Funktionen können auch ausgeführt werden. Adressen werden richtig geokodiert.
Es funktioniert soweit alles, ausser dass die Funktion nicht mit dem Debugger aufgerufen werden kann.

Was passiert, wenn du:

SELECT*FROM tiger.geocode('2 Alder Creek Road Beaverhead MT 59762'::VARCHAR)

aufrufst?

Dann bringt er mir das Resultat der Geokodierung:

ADDY = “(2,“Alder Creek”,Rd,Anaconda,MT,59762,t)”
GEOMOUT = “0101000020AD100000DCDC989EB0415CC032E202D028E94640”
RATING = ‘0’

Wie es sein sollte.

Dein Text in ‘…’ wird als TEXT und nicht als VARCHAR erkannt.
Du könntest deine Funktion immer mit ::VARCHAR aufrufen, dir einen entsprechenden Wrapper von TEXT nach VARCHAR schreiben oder einen entsprechenden CAST hinzufügen.

Die Funktion funktioniert auch ohne ::VARCHAR

SELECT*FROM tiger.geocode(‘2 Alder Creek Road Beaverhead MT 59762’)
–> Das selbe Resultat

Was jedoch nicht funktioniert, ist wenn ich (mit Rechtsklick auf die Funktion) den Debugger aufrufe und dort als Value für den Type character varying ‘2 Alder Creek Road Beaverhead MT 59762’ eingebe. Dabei kommt jedesmal eine Fehlermeldung.

Hmmm, ok falsch verstanden.

Gibst du das mit oder ohne einfache Anführungszeichen an?
Hmm, die anderen 3 Parameter sind aber OUT Parameter - macht der Debugger da irgendetwas falsch?

Hab schon alles versucht.

  • Mit Anführungszeichen ’ ’
  • Ohne Anfürungszeichen
  • Mit ::VARCHAR am Ende des Strings (mit/ohne Anführungszeichen)

Kann es sein, dass der Debugger probleme mit Geometrietypen hat?

Da ist ja an sich kein Geometrietyp im Spiel, weil der einzige IN-Parameter ist ein VARCHAR.

Der Debugger ist von EnterpriseDB, oder?
Kipp doch dort mal einen Bugreport ein oder such, ob die etwas entsprechendes in der FAQ stehen haben.

Ja der Debugger ist von EnterpriseDB.

Ich schau mal ob ich sonst wo noch was finde.
Danke für die Unterstützung.