Какая неприятная ошибка и интересно, как это может привести к портированию данных! Это seems to be known since 9.1, может быть связано только с драйвером JDBC и произошло с нашим 9.3 а !:
Вот еще некоторые детали, я узнал (за помощь, чтобы найти и исправить это специальный в вашем коде или в конечном счете, от «источника хакеров»;)) до сих пор с примерами кода ниже:
- апостроф должен появиться где-то в одной строке или многострочный комментарий выше выберите (например
--'
, /*'*/
, -- foo's cool
)
- явно указанные строк должны содержать
{t
или {d
быть замещены TIME
или DATE
соответственно
- один из строк должны быть явно (возможно, также неявным) типа
text
- закрывающей скобкой в такая же или другая строка где-то необходима для продолжения этой подстановки (например,
select 'foo } bar'
)
- закрывающая скобка в комментарии отключает поведение снова (например
--}
)
.
--'
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}
Примечание: работает как ожидается в psql, поэтому это должно быть сбой JDBC. BTW: однострочный комментарий формально - '-' (два дефиса и пробел) – joop
@joop: Thx для теста и подсказки. Я почти всегда размещал официально рекомендованное пространство за ним для удобочитаемости, но он делает и не будет менять парсер в любое время, так как соотношение прибыли и прибыли слишком плохое. Я просто хотел написать здесь небольшой пример синтаксиса. В моем первоначальном примере у меня было что-то вроде '- это не будет foo bar bla' - что может быть довольно общим английским комментарием: -/ –
Похоже, что реализация парсера JDBC Escape в PostgreSQL работает некорректно. –