On 2014-01-11, Wojtek Gapiński <
wojtas_g....@wp.I.TO.TEZ.pl> wrote:
> Dnia 11-01-2014 12:55 Tomasz napisał:
>> Poradzcie mi jak w pl/pgsql wpisac do stringu ograniczonego przeciez
>> znakami ' rowniez taki sam znak '
> Nie znam pg, ale znak ucieczki (\) nie działa?
I tak i nie. Jak masz prawidłowo skonfigurowanego Pg, nowego, to nie
zadziała:
#v+
$ select 'a\'b';
>>
#v-
(>> znaczy, że czeka na ciąg dalszy polecenia).
Albo, wywali warninga:
#v+
$ select 'a\'b';
WARNING: nonstandard use of \' in a string literal
LINE 1: select 'a\'b';
^
HINT: Use '' to write quotes in strings, or use the escape string syntax (E'...').
?column?
----------
a'b
(1 row)
#v-
To dlatego, że *standard SQL* nie przewiduje escape'owania backslashem w
normalnych stringach.
Większość baz to implementuje, ale Pg (a przynajmniej od pewnego czasu)
stara się mocno być bardzo zgodny ze standardem, i najpierw generował
warninga, a teraz odrzuca.
Oczywiście - da się to wyłączyć opcjami, ale po co kombinować, skoro:
1. możesz użyć E'' stringów, które mają backslash-escape:
#v+
$ select E'a\'b';
?column?
----------
a'b
(1 row)
#v-
2. lepiej i tak użyć dolar-quotes:
#v+
$ select $$a'b$$;
?column?
----------
a'b
(1 row)
#v-
A z zupełnie innej beczki - jeśli programista, piszący zapytania do bazy
danych, z poziomu jakiegoś języka programowania (a nie np. z poziomu psql'a)
używa znaku ' - to na 99.9% popełnia błąd (a przynajmniej generuje coś co
niektórzy określają jako "code smell").