Hallo zusammen,
kurz vorweg, ich habe hier ein PostgreSQL 8.4 vorgegeben. Ich selber habe kaum Erfahrung mit postgresql Datenbanken. Mit SQL an sich schlage ich mich aber auf einfachem Level schon eine Weile rum. Ich hänge hier leider auch so in der Luft, weil ich für diesen Fall mit den ganzen eckigen Klammern im String etc. kein passendes oder für mich widersprüchliche und für mich so nicht funktionierende Beispiel gefunden habe. Das Handbuch (PostgreSQL: Documentation: 8.4: Lexical Structure ) hat mir in dem Fall auch nicht viel weiter geholfen. Liegt warscheinlich an der mangelnden Erfahrung, das ich da was für mich wichtiges überlese/ nicht verstehe.
Das Problem:
ich muss in der Datenbank diverse Datensätze korrigieren. Diese Datensätze beinhalten jeweils eine Seite/Page wie auch immer eines CMS/Intranet-Systems. Ein Update dieser Software zieht es leider nach sich, das ich sehr viele Änderungen am Layout direkt über SQL Abfragen machen muss. Schon viel erledigt, aber an dieser korrektur beiß ich mir die Zähne aus:
IST:
<ac :p lain-text-body>[CDATA[Neues ToDo ...]]</ac :p lain-text-body><
SOLL:
<ac :p lain-text-body><![CDATA[Neues ToDo ...]]></ac :p lain-text-body><
Ich habe schon verstanden, das SQL mit den eckigen Klammern im String ein Problem hat und habe versucht das über E’’ und entsprechende Backslashes zu vermeiden.
Mein Lösungsansatz sieht bisher wie folgt aus:
UPDATE bodycontent SET body = REPLACE(body,E'<ac :p lain-text-body>\[CDATA\[Neues ToDo ...\]\]</ac :p lain-text-body>',E'<ac :p lain-text-body><!\[CDATA\[Neues ToDo ...\]\]></ac :p lain-text-body>');
Nur leider funktioniert das nicht. Irgendwo habe ich da einen Denkfehler drin.
Ich habe auch schon versucht über SELECT Anweisungen die Schreibweise zu überprüfen.
SELECT bodycontent.body FROM bodycontent WHERE bodycontent.body ~ E'<ac :p lain-text-body>\[CDATA\[Neues ToDo ...\]\]</ac :p lain-text-body>';
Hier habe ich aber eher ALLE Seiten als Treffer, als die, in dennen “[CDATA[Neues ToDo …]] …” steht. Das der Select Befehl nicht funktioniert schein aber daran zu liegen, das hier eine RegEx Abfrage (~) vorliegt und ich so wahrscheinlich eine recht Interessante Abfrage in an die DB schicke, die aber überhaupt nichts mit dem zu tun hat was sich möchte.
Wie auch immer:
Kann mir jemand schreiben, wo bei der UPDATE Abfrage mein Denkfehler liegt bzw. ein Beispiel geben?