Verwendung von Backslash in Zeichenketten

Hallo Wissende,
ich möchte in einer Zeichenkette folgendene Inhalte löschen bzw. mit Leerzeichen ersetzen

\c

und

\n

.
Folgender Code funktioniert, wird aber mit einer Warnung vom pgAdmin III quitiert:

new.d4ugeboef_oname_trg = replace(replace(new.d4ugeboef_oname,'\\n',' '),'\\c','');



Wie kann ich den Code so ändern, dass keine Warnung mehr kommt?

Gruß Steffen

Das Zeichen \ nur einmal in dem String verwenden

ew.d4ugeboef_oname_trg = replace(replace(new.d4ugeboef_oname,'\n',' '),'\c','');

Der backslash hat in (standard) SQL keine Bedeutung und in allen modernen Postgres Versionen ist das per default auch so (es gibt eine Option “standard_conforming_strings” die das nicht-Standard Verhalten erlaubt, ist aber nicht zu empfehlen das einzuschalten).

Hallo,
vielen Dank für die schnelle Antwort.

Leider hilft das nicht. Es kommt weiterhin eine Warnung und außerdem funktioniert der Code dann nicht mehr, dh. meine Zeichen werden nicht ersetzt.

Ich nutze übrigens PG 8.4 und pgAdmin 1.10.2

Gruß Steffen

Warum beachtest Du die Hinweise nicht, die PG schon selber gab?

Hint: das, was nach Hint steht :wink:

test=*# select 'das ist\ndie zweite zeile';
         ?column?
---------------------------
 das ist\ndie zweite zeile
(1 row)

test=*# select E'das ist\ndie zweite zeile';
     ?column?
------------------
 das ist         +
 die zweite zeile
(1 row)

test=*# select replace(E'das ist\ndie zweite zeile',E'\n','');
         replace
-------------------------
 das istdie zweite zeile
(1 row)

Hallo,

Warum beachtest Du die Hinweise nicht, die PG schon selber gab?

Jetzt wo du es sagst :slight_smile: .
Wobei ist selbst nach deiner Antwort noch eine Weile nachdenken musste. Finde das eine ungewöhliche Syntax.

Aber so funktioniert es dann auch ohne Warnung:

new.d4ugeboef_oname_trg = replace(replace(new.d4ugeboef_oname,E'\\n',' '),E'\\c','');

Gruß Steffen

Das heisst Du hast den Parameter “standard_conforming_strings” auf “false” stehen.

Ich würde dringend empfehlen diesen auf “true” zu setzen und dann den Backslash als “escape” Zeichen in SQL zu vergessen.

Die aktuellen Versionen haben das alle auf “true” stehen, und nachdem 8.4 bald zum alten Eisen gehört, wird das die anstehende Migration deutlich vereinfachen.

Weitere Details im Handbuch:

http://www.postgresql.org/docs/8.4/static/runtime-config-compatible.html#GUC-ESCAPE-STRING-WARNING
http://www.postgresql.org/docs/8.4/static/runtime-config-compatible.html#GUC-STANDARD-CONFORMING-STRINGS

Hallo castorp,
danke für den Hinweis.
Aber die DB gehört zu einer Fremdanwendung. Da diese natürlich für mich als BlackBox arbeitet, möchte ich ungern Einstellungen ändern.

Mein Trigger funktioniert erst mal fehler- und kommentarfrei und PG 8.4 ist im Moment noch die empfohle Version der “Fremdfima”.

Gruß Steffen