raise notice geht nicht, Literaturtip für plpgsql

Ich steige gerade in die Programmierung mit plpgsql ein, und scheitere schon bei dem Versuch ein simples raise notice hinzukriegen (für später zum Debuggen). Mein Rumpfprogramm (es heißt internal_calculation) lautet:

DECLARE
  errornumber int4;
BEGIN
  -- Initialize
  raise notice 'RRR';
  errornumber := 0;
  return errornumber;
END;

Mit

select internal_calculation();

wird nur das Ergebnis von errornumber zurückgeliefert. Kein Raise notice, nichts. Doppelhäkchen " " und Doppelquotes ‘’ ‘’ bringen auch nichts. Was mache ich denn da falsch?

Ferner wäre ich dankbar für Tips zum Lesen, um erstmal in die Sprache reinzukommen. Ich weiß natürlich, dass es eine Unmenge an Internet-Seiten gibt. Ich würde aber doch gerne erstmal in einem richtigen Buch lesen. Das Buch von ads (ein sehr schönes Buch!) ist mir hier nicht ausführlich genug.

Eremit



test=*# set client_min_messages='notice';
SET
test=*# create function raise_function () returns int as $$begin raise notice 'bin hier'; return 0; end; $$language plpgsql;
CREATE FUNCTION
test=*# select * from raise_function();
NOTICE:  bin hier
 raise_function
----------------
              0
(1 row)

test=*# set client_min_messages='error';
SET
test=*# select * from raise_function();
 raise_function
----------------
              0
(1 row)

Reicht das als Erleuchtung?

Andreas

Erleuchtung ja, weil ich verstanden habe, dass ich in der pg_settings nachschauen muss:

name,"setting","unit","category","short_desc","extra_desc","context","vartype","source","min_val","max_val"
client_min_messages,"notice","\N","Reporting and Logging / When to Log","Sets the message levels that are sent to the client.","Valid values are DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, LOG, NOTICE, WARNING, and ERROR. Each level includes all the levels that follow it. The later the level, the fewer messages are sent.","user","string","default","\N","\N"

Ich habe Deinen set-Befehl ausgeführt, und wie man sieht, ist setting = “notice”. Das Ergebnis ist aber immer noch das Gleiche: weit und breit keine Notice zu sehen.

Eremit

Kann es nicht nachvollziehen, dieses hier funktioniert wie erwartet:

test=# create function eremit() returns int as $$ DECLARE
test$#   errornumber int4;
test$# BEGIN
test$#   -- Initialize
test$#   raise notice 'RRR';
test$#   errornumber := 0;
test$#   return errornumber;
test$# END;
test$#
test$# $$ language plpgsql;
CREATE FUNCTION
test=*# select * from eremit();
 eremit
--------
      0
(1 row)

test=*# set client_min_messages='notice';
SET
test=*# select * from eremit();
NOTICE:  RRR
 eremit
--------
      0
(1 row)

Andreas

Es ist meine Schuld… die Notice prallt an phpPgAdmin ab - und das habe ich natürlich oben nicht erwähnt, weil ich es für unwichtig hielt.
Auf der Kommandozeile kommt die Notice, phpPgAdmin verschluckt sie. Ich bleibe am Ball.
Eremit

Ich werde jetzt so vorgehen, dass ich meine function zum Debuggen mit Putty über die Kommandozeile aufrufe.
Noch irgendwelche Tips zum Einlesen?
Eremit

Zum Einlesen: ich hab auf del.icio.us einiges an Links, findest Du bestimmt was brauchbares.

Allgemeiner Tipp: wird phppgadmin in die Tonne.


Andreas

uargs

Im Logfile hättest du die Notiz auch gesehen, nur mal als Hinweis.
Grafische Tools sind irgendwie unbrauchbar für die Entwicklung.