Was für ein böser Fehler und interessant, wie dies zu wirklich vermasselten Daten führen kann! Es seems to be known since 9.1 kann auch mit unserem 9.3 nur und geschah mit den JDBC-Treiber verwendet wird !:
Hier sind einige weitere Details I (für die Unterstützung fand heraus zu finden und zu beheben diesen Ad-hoc in Ihrem Code oder schließlich durch die „Quelle Hacker“;)) bisher mit Beispiel-Code unten:
- ein Apostroph irgendwo in einem einzeiligen oder mehrzeiligen Kommentar über die Auswahl (zB
--'
, erscheinen /*'*/
, -- foo's cool
)
- explizit gegeben Strings müssen
{t
oder {d
werden substituiert durch TIME
oder DATE
jeweils
- eine der Zeichenketten enthalten müssen (auch implizit vielleicht) explizit sein vom Typ
text
- eine schließenden Klammer in der die gleiche oder eine andere Zeichenfolge irgendwo ist notwendig, um diese Substitution fortzusetzen (z. B.
select 'foo } bar'
)
- eine schließende Klammer in einem Kommentar sperrt wieder das Verhalten (z.B.
--}
)
.
--'
select '{t'::text
union all select '{ta}'
union all select '{tfoo bar'
-- these are untouched
union all select '{ t}'
union all select 'foo { t}'
-- there seems to be an opening/closing "{" "}" match behaviour behind
-- it since the 2nd row below
union all select '{t'
union all select '{ta}'
union all select '{tfoo bar'
-- also "d" seems to be a "trigger"
union all select '}{d}'
-- a closing brace in a comment seems to disable it completely again
union all select '{d'
union all select '{d'
-- }
union all select 'a}{d}'
text
------------
TIME
{ta
TIME foo bar
{ t
foo { t}
TIME
{ta
TIME foo bar
DATE
DATE
{d
a}{d}
Hinweis: funktioniert wie erwartet in psql, also muss dies eine JDBC-Störung sein. BTW: der einzeilige Kommentar ist formal '-' (zwei Bindestriche und ein Leerzeichen) – joop
@joop: Thx für den Test und den Hinweis. Ich lege fast immer den formell empfohlenen Raum zur besseren Lesbarkeit dahinter, aber er ändert den Parser nicht und wird ihn auch nicht ändern, da das Gewinn-Kosten-Verhältnis viel zu schlecht ist. Ich wollte hier nur ein minimales Syntaxbeispiel schreiben. In meinem ursprünglichen Beispiel hatte ich etwas wie '- es wird nicht foo bar bla '- was durchaus allgemeine Englisch kommentieren kann: -/ –
Es sieht aus wie die JDBC Escape-Parser-Implementierung in PostgreSQL funktioniert nicht richtig. –