En resumen, debe reinstalar postgis, posiblemente solo drop extension postgis;
y create extension postgis;
.
Explicación más larga
Es posible que te estés perdiendo solo este tipo, pero dudo que sea solo eso, aunque si quieres probar, aquí está de 2.3:
CREATE TYPE public.geometry
(INPUT=geometry_in,
OUTPUT=geometry_out,
RECEIVE=geometry_recv,
SEND=geometry_send,
TYPMOD_IN=geometry_typmod_in,
TYPMOD_OUT=geometry_typmod_out,
ANALYZE=geometry_analyze,
CATEGORY='U', DEFAULT='',
INTERNALLENGTH=-1, ALIGNMENT=double, STORAGE=MAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
COMMENT ON TYPE public.geometry
IS 'postgis type: Planar spatial data type.';
En cuanto a los shells, puede leer más sobre ellos en la documentación .
En resumen :Algunos tipos requieren funciones que a su vez requieren que se declare el tipo with, por lo que ninguno puede crearse, normalmente.
Para solucionar ese problema, Postgres creará tipos de shell que son prácticamente marcadores de posición solo para satisfacer la validación.
En tu caso geometry
es de tipo shell y no se declaró correctamente, lo que significa que postgis no se instaló correctamente.
El tipo de shell se ve así:
CREATE TYPE public.geometry
(INPUT=shell_in,
OUTPUT=shell_out,
RECEIVE=-,
SEND=-,
ANALYZE=-,
CATEGORY='P',
PASSEDBYVALUE, DEFAULT='',
INTERNALLENGTH=4, ALIGNMENT=int4, STORAGE=PLAIN);
ALTER TYPE public.geometry
OWNER TO postgres;
Y la función que requiere el tipo de shell podría ser:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
RETURNS geometry
AS '$libdir/postgis-2.3','LWGEOM_in'
LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;
Si miras hacia atrás a la geometry
adecuada definición notará que esta función es parte de ella, pero no en este shell.