Кажется, что putFragment / getFragment это просто безопасный способ хранения фрагментов и его состояний внутри диспетчера фрагментов без его отображения.
Например, у вас есть 2 фрагмента, которые хранятся в ваших полях активности. Вы показываете один из них, а затем заменяете его другим, после чего вы меняете ориентацию экрана. Поля в вашей деятельности возобновляются, но фрагмент, который в настоящее время отображается, сохраняет свое состояние, а другие нет. Но если вы храните фрагменты внутри менеджера фрагментов, у вас будет два фрагмента с фактическими состояниями.
Вы можете объединить все необходимые UUID в одном выражении:
select w1.uid, array_agg(w2.uid order by wl.idx) as uuidlist
from words w1
cross join lateral unnest(w1.wordlist) with ordinality as wl(word,idx)
join words w2 on w2.word = wl.word
where w1.wordlist is not null
and w1.uuidlist is null -- optional
group by w1.uid;
Опция with ordinality
возвращает дополнительный столбец, который указывает положение элемента в исходном массиве. Это необходимо для агрегирования UUID в правильном порядке.
Это возвращает следующий результат с вашими примерами данных:
uid | uuidlist
-----+------------
cccc | {aaaa,bbbb}
Это может использоваться в качестве источника оператора обновления (при условии, что столбец uid
уникален):
update words
set uuidlist = t.uuidlist
from (
select w1.uid, array_agg(w2.uid order by wl.idx) as uuidlist
from words w1
cross join lateral unnest(w1.wordlist) with ordinality as wl(word,idx)
join words w2 on w2.word = wl.word
where w1.wordlist is not null
and w1.uuidlist is null -- optional
group by w1.uid
) t
where t.uid = words.uid;
Пример в сети: https://rextester.com/LZUYC57184
(обратите внимание, что отображение массивов в этом примере немного странно) sup> [ 1111]