Проблема в том, что в '%123\\456%' на самом деле нет бэкслеша ;)
Бэкслеш уже экранирующий символ в строках, и чтобы запихать один в строку, приходится писать его два раза. Но в 'like' он тоже экранирующий символ, поэтому чтобы заматчить один бэкслеш лайком, его тоже надо экранировать. Итого, чтобы заматчить один бэкслеш, его надо написать аж четыре раза. Т.е. как-то так:
plesk=> select E'\\' like E'%\\%';
?column?
— f
(1 row)
plesk=> select E'\\' like E'%\\\\%';
?column?
— t
(1 row)
Ну или указать другой экранирующий символ:
plesk=> select E'\\' like E'%\\%' escape '#';
?column?
— t
(1 row)
Так что если с четырьмя слешами документ не найдет, то все в порядке :)
Вот тут про это написано, 9.7.1:
www.postgresql.org/docs/8.0/static/functions-matching.html