PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O tipo Postgres {field type} é apenas um shell


Resumindo, você precisa reinstalar o postgis, possivelmente apenas drop extension postgis; e create extension postgis; .

Explicação mais longa


Você pode estar perdendo apenas esse tipo, mas duvido que seja apenas isso, mas se você quiser tentar, aqui está o 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.';

Quanto aos shells, você pode ler mais sobre eles na documentação .

Resumindo :Alguns tipos exigem funções que, por sua vez, exigem que o tipo com seja declarado, portanto, nenhum deles pode ser criado - normalmente.

Para contornar esse problema, o Postgres criará tipos de shell que são praticamente espaços reservados apenas para satisfazer a validação.

No seu caso geometry é do tipo shell e não foi declarado corretamente, o que significa que o postgis não foi instalado corretamente.

O tipo de shell se parece com isso:
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;

E a função que requer o tipo de shell pode ser:
CREATE OR REPLACE FUNCTION geometry_in(cstring)
    RETURNS geometry
    AS '$libdir/postgis-2.3','LWGEOM_in'
    LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;

Se você olhar para trás na geometry adequada definição, você notará que esta função faz parte dela, mas não neste shell.