From: | Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at> |
---|---|
To: | "Guenther Boelter *EXTERN*" <gboelter(at)gmail(dot)com>, "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Welchen 'Data type' nehme ich hier? |
Date: | 2013-02-11 11:46:52 |
Message-ID: | A737B7A37273E048B164557ADEF4A58B057B1D6B@ntex2010a.host.magwien.gv.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
Guenther Boelter schrieb:
> >> ich habe mal wieder ein kleineres Problem im Rahmen der Umstellung von
> >> MySQL auf PostgreSQL:
> >>
> >> Welchen 'data type' nehme ich sinnvollerweise fuer
> >>
> >> A:) PDF-Dateien (ca. 25 KB gross)
> >>
> >> B:) XML-Dateien (ca. 10-20 KB gross)
> >>
> >> Die PDF-Dateien habe ich zunaechst mal als BYTEA gespeichert, die
> >> XML-Dateien als TEXT.
> >
> > Dass sollte okay sein. Es gibt auch einen speziellen XML-Datentyp:
> > http://www.postgresql.org/docs/current/interactive/datatype-xml.html
> >
> > Ob dieser besser als TEXT ist mußt Du entscheiden, der XML-Datentyp hat
> > halt noch z.B. Konsistenzprüfungen und so.
> >
> >
> >>
> >> Bei den PDF-Dateien konnte ich es bisher noch nicht pruefen, aber bei
> >> den XML-Dateien scheint PostgreSQL die enthaltenen '\n' in '\012'
> >> unzuwandeln. Letzt sich Letzeres irgendwie verhindern?
> >
> > Unwahrscheinlich. PostgreSQL vergreift sich nicht an den Daten.
> > Im übrigen ist '\n' oktal '\012'. Evtl. ist was bei Konvertierungen
> > zwischen Windows / Linux kapott gegangen.
> kurzes Feedback zu dem Problem mit dem '\n' bzw. '\012':
>
> Es ist tatsaechlich ein Fehler in der Library den MySQL einfach ignoriert hat. PostgreSQL dagegen gibt
> folgende Warnung aus:
>
> WARNING: nonstandard use of \\ in a string literal
> LINE 1: EXECUTE qpsqlpstmt_1 ('<?xml version="1.0" encoding="UTF-8"?...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
>
> Dafuer musste ich allerdings auch erst den Debugger anwerfen.
Es handelt sich um eine PostgreSQL-Version vor 9.1, richtig?
Es gibt mehrere Lösungen:
1) standard_conforming_strings = on
2) Wörtlich gemeinte Backslashes verdoppeln und die String-Konstante
mit einem "E" einleiten: EXECUTE s (E'<?xml ... \\n ...>');
3) Extended Query Protocol (mit Parametern) verwenden
Liebe Grüße,
Laurenz Albe
From | Date | Subject | |
---|---|---|---|
Next Message | Guenther Boelter | 2013-02-12 08:07:48 | Re: Welchen 'Data type' nehme ich hier? |
Previous Message | Albe Laurenz | 2013-02-11 11:38:01 | Re: Leerzeichen in LIKE Bedingung |