Usando regexp_replace é mais simples:
# select regexp_replace('test1234test45abc', '[^0-9]+', '', 'g');
regexp_replace
----------------
123445
(1 row)
O
^
significa not
, portanto, qualquer caractere que não no intervalo 0-9
será substituído por uma string vazia, ''
. O
'g'
é um sinalizador que significa que todas as correspondências serão substituídas, não apenas a primeira correspondência.