
Quotes und Klammern unter 8.2
Tach zusammen,
ich stecke hier eine leicht ungewoehnliche Kombination aus Zeichen in
ein Varchar-Feld. Folgendes muss da letztendlich drinstehen:
'watrcrsl [at] hydro(*)_line'
..... und zwar muessen sowohl die Hochkommata als auch die Klammern und
der Asterisk Teil des Feldinhaltes werden. Um diese Zeichenfolge in das
Feld zu bekommen, habe ich mich bisher immer eines:
INSERT INTO .... VALUES (...., '\'watrcrsl [at] hydro(*)_line\'', ....);
bedient. Unter 8.2 wird man bekanntermassen explizit darauf
hingewiesen, man solle das anders machen, aber irgendwie begreife ich
den dazugehoerigen Hinweis falsch. Gemaess Doku habe ich verstanden,
dass mein INSERT so aussehen soll:
INSERT INTO .... VALUES (...., E'watrcrsl [at] hydro(*)_line', ....);
Alles wunderbar, niemand meckert .... aber die Hochkommata landen
nicht im Feld, was sich natuerlich stoerend auswirkt.
Mein SQL-Script ist handgeschrieben und wird auf einem Linux-System
ganz klassisch mittels
psql -d <Datenbank> -f <SQL-Script>
appliziert. Kann mir jemand verraten, wo der Fallstrick war ?
Dankeschoen,
Martin.
--
Unix _IS_ user friendly - it's just selective about who its friends are !
------------------------------------------------------------ --------------
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
Re: Quotes und Klammern unter 8.2
On Thu, 7 Dec 2006 11:31:43 +0000 (UTC), Martin Spott <Martin.Spott [at] mgras.net> wrote:
> Tach zusammen,
Servus
[...]
> bedient. Unter 8.2 wird man bekanntermassen explizit darauf
> hingewiesen, man solle das anders machen, aber irgendwie begreife ich
> den dazugehoerigen Hinweis falsch. Gemaess Doku habe ich verstanden,
> dass mein INSERT so aussehen soll:
>
> INSERT INTO .... VALUES (...., E'watrcrsl [at] hydro(*)_line', ....);
>
> Alles wunderbar, niemand meckert .... aber die Hochkommata landen
> nicht im Feld, was sich natuerlich stoerend auswirkt.
>
INSERT INTO .... VALUES (...., E'''watrcrsl [at] hydro(*)_line''', ....);
Bernd
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
Re: Quotes und Klammern unter 8.2
am Thu, dem 07.12.2006, um 13:06:32 +0100 mailte Bernd Helmle folgendes:
> >
> > INSERT INTO .... VALUES (...., E'watrcrsl [at] hydro(*)_line', ....);
> >
> > Alles wunderbar, niemand meckert .... aber die Hochkommata landen
> > nicht im Feld, was sich natuerlich stoerend auswirkt.
> >
>
> INSERT INTO .... VALUES (...., E'''watrcrsl [at] hydro(*)_line''', ....);
Funktioniert mit 8.1 übrigens auch. Ist das eine allgemeine Regel, eine=
n
String einfach in E'' und '' zu packen und alles wird gut?
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47215, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
Re: Quotes und Klammern unter 8.2
Bernd Helmle wrote:
> INSERT INTO .... VALUES (...., E'''watrcrsl [at] hydro(*)_line''', ....);
Nein, entweder
'''watrcrsl [at] hydro(*)_line'''
oder
E'\'watrcrsl [at] hydro(*)_line\''
Das E sorgt nur dafür, dass die Backslashes gehen. Aber das braucht man=
hier eigentlich nicht.
--
Peter Eisentraut
http://developer.postgresql.org/~petere/
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
Re: Quotes und Klammern unter 8.2
On Thu, 7 Dec 2006 13:57:36 +0100, Peter Eisentraut <peter_e [at] gmx.net> wrote:
> Bernd Helmle wrote:
>> INSERT INTO .... VALUES (...., E'''watrcrsl [at] hydro(*)_line''', ....);
>
> Nein, entweder
>
> '''watrcrsl [at] hydro(*)_line'''
>
> oder
>
> E'\'watrcrsl [at] hydro(*)_line\''
>
> Das E sorgt nur dafür, dass die Backslashes gehen. Aber das braucht man
> hier eigentlich nicht.
>
>
Stimmt.
Ich hatte jetzt nicht drauf geachtet, ob da nun noch ein backslash drin ist oder nicht
(hab nur das E'' und die fehlenden quotes beachtet), aber ich präferiere sowieso die
'''' Syntax. Jede andere DB nimmt den \ immer als Literal (was der Standardkonforme Weg
ist). Und sowieso ist \' potentiell unsicher.
Bernd
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq
Re: Quotes und Klammern unter 8.2
Moggeeen !
Dank fuer die freundlichen Rueckmeldungen !
On Thu, Dec 07, 2006 at 02:20:11PM +0100, Bernd Helmle wrote:
>
>
>
> On Thu, 7 Dec 2006 13:57:36 +0100, Peter Eisentraut <peter_e [at] gmx.net> w=
rote:
> > Nein, entweder
> >
> > '''watrcrsl [at] hydro(*)_line'''
> >
> > oder
> >
> > E'\'watrcrsl [at] hydro(*)_line\''
> >
> > Das E sorgt nur dafür, dass die Backslashes gehen. Aber das braucht=
man
> > hier eigentlich nicht.
> Ich hatte jetzt nicht drauf geachtet, ob da nun noch ein backslash drin=
ist oder nicht
> (hab nur das E'' und die fehlenden quotes beachtet), aber ich präferi=
ere sowieso die
> '''' Syntax. Jede andere DB nimmt den \ immer als Literal (was der Stan=
dardkonforme Weg
> ist). Und sowieso ist \' potentiell unsicher.
Habt Ihr eine Meinung, wann man den hier benutzen sollte ?
$$'watrcrsl [at] hydro(*)_line'$$
Ist das der allerletzte Notnagel, wenn alle Stricke reissen, oder
betrachtet ihr den als probates Mittel ?
Tschuess,
Martin.
--
Unix _IS_ user friendly - it's just selective about who its friends are =
!
------------------------------------------------------------ -------------=
-
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match
Re: Quotes und Klammern unter 8.2
>> Tach zusammen,
> Servus
Grüßihna,
>> Folgendes muss da letztendlich drinstehen:
>>
>> 'watrcrsl [at] hydro(*)_line'
>>
>> Gemaess Doku habe ich verstanden,
>> dass mein INSERT so aussehen soll:
>>
>> INSERT INTO .... VALUES (...., E'watrcrsl [at] hydro(*)_line', ....);
>>
>> Alles wunderbar, niemand meckert .... aber die Hochkommata landen
>> nicht im Feld, was sich natuerlich stoerend auswirkt.
>
> INSERT INTO .... VALUES (...., E'''watrcrsl [at] hydro(*)_line''', ....);
Das E ist nur zur Kennzeichnung eines Strings da, um anzudeuten,
daß das einfache Hochkomma nicht, wie im Standard gefordert, durch ein
doppeltes Hochkomma geschrieben, sondern nach PostgreSQL-Tradition durch
einen vorgestellten Backslash geschützt wird.
Das Beispiel von Bernd Helmle sollte also funktionieren, aber dann würde
ich gleich das E weglassen, weil es dann unnötig ist.
Liebe Grüße,
Laurenz Albe
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
Re: Quotes und Klammern unter 8.2
> Habt Ihr eine Meinung, wann man den hier benutzen sollte ?
>
> $$'watrcrsl [at] hydro(*)_line'$$
>
> Ist das der allerletzte Notnagel, wenn alle Stricke reissen, oder
> betrachtet ihr den als probates Mittel ?
$$ ist ebensogut wie '.
Was ich nehme, hängt davon ab, wieviele ' in meinen Strings vorkommen.
Liebe Grüße,
Laurenz Albe
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster