Usando regexp_replace es más simple:
# select regexp_replace('test1234test45abc', '[^0-9]+', '', 'g');
regexp_replace
----------------
123445
(1 row)
El ^
significa not
, por lo que cualquier carácter que no en el rango 0-9
será reemplazado con una cadena vacía, ''
.
El 'g'
es una bandera que significa que se reemplazarán todas las coincidencias, no solo la primera.