org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: ltree ~ ltree

Я не могу разобраться со странной ошибкой в Postgresql. В базе есть таблица

CREATE TABLE public.mytable(
id BIGINT NOT NULL,
name TEXT NOT NULL,
parent BIGINT NOT NULL,
path LTREE NOT NULL
);

Я использую Spring boot + Mybatis Framework. Мне нужно сделать запрос в базу и получить из этой таблицы потомков 1 уровня. т.е. что-то типа такого запроса:

<select id="getByPath" resultMap="resultMap">
    select * from mytable where path ~ 'root.28.*{1}'
</select>

Этот запрос отрабатывает как надо.

Но у меня ведь майбатис, и запрос должен выглядеть так:

<select id="getByPath" resultMap="resultMap">
    select * from mytable where path ~ #{path}
</select>

На этом запросе летит ошибка:

org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: ltree ~ character varying
Подсказка: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить 
явные приведения типов.

Добавляю в запрос приведение типов:

<select id="getByPath" resultMap="resultMap">
    select * from mytable where path ~ #{path}::ltree
</select>

Но все равно вылетает та же ошибка:

org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: ltree ~ ltree
Подсказка: Оператор с данными именем и типами аргументов не найден. Возможно, вам следует добавить 
явные приведения типов.

Помогите разобраться с этой ошибкой.


Ответы (2 шт):

Автор решения: Aziz Umarov

У вас запрос внутри тега. подстановка делает ваш запрос

 select * from mytable where path ~ root.28.*{1} 

без кавычек. В следствии чего у ваш ошибка оператор не существует.

Попробуйте использовать спецсимволы в запросе

"   &#34;

'   &#39;
→ Ссылка
Автор решения: Roman Konoval

У оператора ~ перегруженного для ltree правый операнд типа lquery. Так что правильно так:

<select id="getByPath" resultMap="resultMap">
    select * from mytable where path ~ #{path}::lquery
</select>
→ Ссылка