还原错误为“类型几何不存在”的Postgis数据库

时间:2020-06-24 18:08:04

标签: geometry postgis

所以我有一个由pg_dump创建的159G的postgres转储文件,我想将其还原到数据库中。它运行良好,直到引发以下错误:

$ psql -a -U postgres -d mydb < /opt/postgres_restore_files/db_mydb_2020-06-11_18-00.dmp
.....
CREATE INDEX
CREATE INDEX
CREATE INDEX
ERROR:  type "geometry" does not exist
LINE 1: SELECT geog::geometry
                     ^
QUERY:  SELECT geog::geometry
CONTEXT:  PL/pgSQL function public._togeom(public.geography) line 3 at RETURN
STATEMENT:  CREATE INDEX my_index ON mydb.geo_zone USING gist (public._togeom(geom));
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

Below are the definitions:
CREATE FUNCTION public._togeom(geog public.geography) RETURNS public.geometry
    LANGUAGE plpgsql IMMUTABLE
    AS $$
        BEGIN
                RETURN geog::geometry;
        END;
$$;

ALTER FUNCTION public._togeom(geog public.geography) OWNER TO postgres;

CREATE TABLE mydb.geo_zone (
    ...
    geom public.geography,
    ...
);
ALTER TABLE mydb.geo_zone OWNER TO my_user;
....
CREATE INDEX my_index ON mydb.geo_zone USING gist (public._togeom(geom));

创建扩展名postgis后,我可以看到类型几何存在于公共架构中,不知道为什么在还原过程中会引发该错误。另外,我之后尝试再次手动运行CREATE INDEX命令,它可以正常运行而没有任何错误,并且可以看到创建的索引“ my_index”。但是我当然不希望手动修复此问题,只需尝试了解导致问题的原因。

非常感谢您的任何想法! 谢谢。

0 个答案:

没有答案