У меня есть две таблицы, и я хочу выполнить левое соединение второй и первой с помощью алгоритма нечеткого сопоставления Левенштейна. Таблица ita_public содержит данные jsonb, и сопоставление происходит между строкой (supplier_name) и некоторыми вложенными данными в строке json.
ita_public
CREATE TABLE public.ita_public
(
id integer NOT NULL DEFAULT nextval('ita_data_id_seq'::regclass),
info jsonb NOT NULL,
CONSTRAINT ita_data_pkey PRIMARY KEY (id)
)
ita_sn_private
СОЗДАТЬ ТАБЛИЦУ public.ita_sn_private
(
id integer NOT NULL DEFAULT nextval('ita_sn_private_id_seq'::regclass),
supplier_name character varying COLLATE pg_catalog."default",
supplier_streetadd character varying COLLATE pg_catalog."default",
CONSTRAINT ita_sn_private_pkey PRIMARY KEY (id)
)
Query
SELECT
priv.*,
pub.info::json->>'name' as match_org_name,
pub.info::json->'locations'->'items'-> 0 ->'address'->>'streetName'
FROM ita_sn_private as priv
LEFT JOIN ita_public as pub
ON ((levenshtein(priv.supplier_name, pub.info::json->>'name') < 3))
Однако я получаю сообщение об ошибке:
ERROR: levenshtein argument exceeds maximum length of 255 characters SQL state: 22023
Может кто-нибудь помочь с этим? Я ничего не могу найти в Интернете по этому поводу. Я создал тестовые таблицы и тестовые данные, и запрос работал нормально, но в моем исходном наборе данных - нет.





От документация:
levenshtein(text source, text target) returns int
Both source and target can be any non-null string, with a maximum of 255 characters.
Можешь попробовать:
ON ((levenshtein(left(priv.supplier_name, 255), left(pub.info::json->>'name', 255)) < 3))