Re: Welchen 'Data type' nehme ich hier?

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

In response to

Responses

Browse pgsql-de-allgemein by date

  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