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 шт):
У вас запрос внутри тега. подстановка делает ваш запрос
select * from mytable where path ~ root.28.*{1}
без кавычек. В следствии чего у ваш ошибка оператор не существует.
Попробуйте использовать спецсимволы в запросе
" "
' '
У оператора ~ перегруженного для ltree правый операнд типа lquery. Так что правильно так:
<select id="getByPath" resultMap="resultMap">
select * from mytable where path ~ #{path}::lquery
</select>