sql >> Databáze >  >> RDS >> PostgreSQL

Postgres typ {field type} je pouze shell

Stručně řečeno, musíte přeinstalovat postgis, možná jen drop extension postgis; a create extension postgis; .

Delší vysvětlení

Možná by vám mohl chybět právě tento typ, ale pochybuji, že je to jen tím, ale pokud to chcete zkusit, tady je z 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.';

Pokud jde o shelly, můžete si o nich přečíst více v dokumentaci .

Ve zkratce :Některé typy vyžadují funkce, které zase vyžadují, aby byl deklarován typ s, takže nelze vytvořit ani jeden - normálně.

Aby se tento problém vyřešil, Postgres vytvoří typy shellu, které jsou do značné míry zástupným symbolem, aby uspokojily validaci.

Ve vašem případě geometry je typu shell a nebyl správně deklarován, což znamená, že postgis nebyl správně nainstalován.

Typ shellu vypadá takto:

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;

A funkce vyžadující typ shellu může být:

CREATE OR REPLACE FUNCTION geometry_in(cstring)
    RETURNS geometry
    AS '$libdir/postgis-2.3','LWGEOM_in'
    LANGUAGE 'c' IMMUTABLE STRICT PARALLEL SAFE;

Pokud se podíváte zpět na správnou geometry definice si všimnete, že tato funkce je její součástí, ale ne v tomto shellu.




  1. Jak deklarovat uživatelsky definovat výjimku pomocí PRAGMA EXCEPTION_INIT

  2. Jak v NodeJS uložit objekt JSON jako text s modulem node-postgres?

  3. Dotaz MySQL:Jak správně identifikovat a znovu přeložit výsledné hodnoty oddělené čárkami na původní pojmy pomocí CONCAT_WS a COALESCE

  4. Vyberte z tabulky pomocí odkazu z propojené tabulky (Připojit se v rámci spojení?)