Você pode usar a correspondência de padrões função no Postgres.
Descobrir primeiro um padrão para capturar tudo até o quarto
>
personagem. Para iniciar seu padrão, você deve criar um subgrupo que capture não
>
caracteres e um >
personagem:([^>]*>)
Em seguida, capture isso quatro vezes para chegar à quarta instância de
>
([^>]*>){4}
Em seguida, você precisará agrupar isso em um grupo para que a correspondência traga de volta todas as quatro instâncias:
(([^>]*>){4})
e coloque um símbolo de início de string para garantir que ele corresponda apenas ao início da String (não no meio):
^(([^>]*>){4})
Aqui está um exemplo de regex101 funcional disso!
Depois de ter o padrão que retornará o que você deseja no primeiro elemento do grupo (que você pode dizer no regex online no painel do lado direito), você precisa selecioná-lo novamente no SQL.
No Postgres, a função substring tem a opção de usar um padrão regex para extrair texto da entrada usando uma instrução 'from' na substring.
Para finalizar, junte tudo!
select substring(filter_type from '^(([^>]*>){4})')
from filter_table
Veja um sqlfiddle funcionando aqui
Se você quiser corresponder a string inteira sempre que houver menos de quatro instâncias de
>
, use esta expressão regular: ^(([^>]*>){4}|.*)