Сбой конкатенации дерева при использовании полей, но успешно при использовании литералов - PullRequest
0 голосов
/ 08 мая 2019

с такой простой таблицей, как эта

create table matpath (
    obj varchar primary key,
    path ltree
);

Я пытаюсь запустить следующий запрос:

select path || obj from matpath;

, но он не работает, я получаю syntax error at position 8

Это работает, если я использую буквальный текст

select path || 'sometext' from matpath;

Я подозреваю, что мне нужно наложить объект obj на что-то, но я не могу понять, каким он должен быть.

Я пытался varchar, text, ltree

РЕДАКТИРОВАТЬ: Я на postgresql 11,1

1 Ответ

1 голос
/ 08 мая 2019

Судя по появившемуся в комментариях сообщению об ошибке, в вашем столбце obj появляется недопустимый символ, попробуйте

SELECT *
FROM matpath
WHERE obj !~ '^[a-zA-Z0-9_.]*$' -- find invalid characters
OR octet_length(path::varchar || obj) > 256 -- find keys that are potentially too long

Ltree может содержать только символы A-Za-z0-9_ и . и не должно превышать 256 байт.

https://www.postgresql.org/docs/current/ltree.html#id-1.11.7.30.4

...