Проблема: у меня есть ограничения в коде, который я пишу, который не будет читаться в столбцах> 4 Кбайт
Хочу: превратить одну строку в несколько строк с новой максимальной длиной и иметь порядковый номер для держите их в порядке.
Я выполнял это действие в DB2 ранее, используя предложение with и рекурсивный запрос, я пытаюсь преобразовать код для работы с Postgres. У меня не так много Postgres опыта, чтобы узнать, есть ли лучший способ сделать это.
Для начала у меня есть таблица
Create table test_long_text (
test_id numeric(12,0) NOT NULL,
long_text varchar(64000)
)
Вот мой запрос пытался написать и не удалось.
WITH RECURSIVE rec(test_id, len, ord, pos) as (
select test_id, octet_length(long_text), 1, 1 from test_long_text
union all
select test_id, len, ord+1, pos+4096 from rec where len >=4096)
select A.test_id, ord, substr(long_text, pos, 4096) from test_long_text A
inner join rec using (test_id)
order by A.test_id, ord
В настоящее время я получаю сообщение об ошибке отрицательной длины подстроки, не допускается или она висит бесконечно.
Ожидаемые результаты: где текст представляет собой фрагменты текста в максимум 4096 байт. притвориться, что AB C - более длинная строка.
+--------------+
| ID |ORD|TEXT |
| 1 |1 |ABC |
+--------------+
| 2 |1 |ABC |
+--------------+
| 2 |2 |DEF |
+--------------+
| 3 |1 |ABC |
+--------------+
| 3 |2 |DEF |
+--------------+
| 3 |3 |GHI |
+--------------+