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.