如何卸载 PostGIS 旧版(预扩展)
How to uninstall PostGIS legacy (pre extensions)
这看起来像是一个转储问题。但是,我有这个遗留数据库,它是 运行 PostGIS(但不再是)并且在转储中仍然有很多 PostGIS 特定代码。像这样的东西:
CREATE TYPE box2d (
INTERNALLENGTH = 65,
INPUT = box2d_in,
OUTPUT = box2d_out,
ALIGNMENT = int4,
STORAGE = plain
);
和
CREATE FUNCTION _st_concavehull(param_inputgeom geometry) RETURNS geometry
LANGUAGE plpgsql IMMUTABLE STRICT
AS $$
DECLARE
vexhull GEOMETRY;
var_resultgeom geometry;
var_inputgeom geometry;
vexring GEOMETRY;
cavering GEOMETRY;
cavept geometry[];
seglength double precision;
var_tempgeom geometry;
scale_factor integer := 1;
i integer;
BEGIN
-- First compute the ConvexHull of the geometry
vexhull := ST_ConvexHull(param_inputgeom);
var_inputgeom := param_inputgeom;
...
(你懂的)。
我不介意丢失任何 GIS 相关数据,但我不应该丢失这些数据。我也很擅长倾倒和重新加载,尽管不这样做显然更好。
谢谢
FWIW,因为似乎没有官方卸载脚本(据我所知),这是我最终使用的脚本 运行,用于删除所有数据类型和函数创建者:
DROP TYPE IF EXISTS box2d CASCADE;
DROP TYPE IF EXISTS box2df CASCADE;
DROP TYPE IF EXISTS box3d CASCADE;
DROP TYPE IF EXISTS geography CASCADE;
DROP TYPE IF EXISTS geometry CASCADE;
DROP TYPE IF EXISTS geometry_dump CASCADE;
DROP TYPE IF EXISTS gidx CASCADE;
DROP TYPE IF EXISTS pgis_abs CASCADE;
DROP TYPE IF EXISTS spheroid CASCADE;
DROP TYPE IF EXISTS valid_detail CASCADE;
DROP TABLE IF EXISTS spatial_ref_sys CASCADE;
DROP FUNCTION IF EXISTS _postgis_join_selectivity(regclass, text, regclass, text, text) CASCADE;
DROP FUNCTION IF EXISTS _postgis_stats(tbl regclass, att_name text, text) CASCADE;
DROP FUNCTION IF EXISTS checkauth(text, text) CASCADE;
DROP FUNCTION IF EXISTS checkauthtrigger() CASCADE;
DROP FUNCTION IF EXISTS dropgeometrytable(table_name character varying) CASCADE;
DROP FUNCTION IF EXISTS dropgeometrytable(schema_name character varying, table_name character varying) CASCADE;
DROP FUNCTION IF EXISTS geography_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_compress(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_decompress(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_penalty(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_picksplit(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_union(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_in(cstring[]) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_out(integer) CASCADE;
DROP FUNCTION IF EXISTS geometry_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_compress_2d(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_compress_nd(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_decompress_2d(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_decompress_nd(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_penalty_2d(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_penalty_nd(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_picksplit_2d(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_picksplit_nd(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_union_2d(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_union_nd(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_typmod_in(cstring[]) CASCADE;
DROP FUNCTION IF EXISTS geometry_typmod_out(integer) CASCADE;
DROP FUNCTION IF EXISTS gettransactionid() CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_joinsel_2d(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_joinsel_nd(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_sel_2d(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_sel_nd(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text, text) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text, timestamp without time zone) CASCADE;
DROP FUNCTION IF EXISTS postgis_cache_bbox() CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_dims(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_srid(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_type(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_geos_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_lib_build_date() CASCADE;
DROP FUNCTION IF EXISTS postgis_lib_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_libjson_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_libxml_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_proj_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_build_date() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_installed() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_released() CASCADE;
DROP FUNCTION IF EXISTS postgis_svn_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_type_name(geomname character varying, coord_dimension integer, use_new_name boolean) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_dims(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_srid(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_type(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_version() CASCADE;
DROP FUNCTION IF EXISTS st_area(text) CASCADE;
DROP FUNCTION IF EXISTS st_asewkt(text) CASCADE;
DROP FUNCTION IF EXISTS st_asgeojson(text) CASCADE;
DROP FUNCTION IF EXISTS st_asgml(text) CASCADE;
DROP FUNCTION IF EXISTS st_askml(text) CASCADE;
DROP FUNCTION IF EXISTS st_assvg(text) CASCADE;
DROP FUNCTION IF EXISTS st_astext(text) CASCADE;
DROP FUNCTION IF EXISTS st_coveredby(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_covers(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_distance(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_dwithin(text, text, double precision) CASCADE;
DROP FUNCTION IF EXISTS st_intersects(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_length(text) CASCADE;
DROP FUNCTION IF EXISTS st_relatematch(text, text) CASCADE;
找到更多:
DROP FUNCTION IF EXISTS box3d_extent_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS box3d_extent_out(box3d_extent) CASCADE;
DROP FUNCTION IF EXISTS chip_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS chip_out(chip) CASCADE;
DROP FUNCTION IF EXISTS compression(chip) CASCADE;
DROP FUNCTION IF EXISTS datatype(chip) CASCADE;
DROP FUNCTION IF EXISTS factor(chip) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_join_selectivity(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_selectivity(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_dims(integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_srid(integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_type(integer) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS height(chip) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_compress(internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_decompress(internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_penalty(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_picksplit(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_union(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS postgis_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS postgis_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_uses_stats() CASCADE;
DROP FUNCTION IF EXISTS setfactor(chip, real) CASCADE;
DROP FUNCTION IF EXISTS setsrid(chip, integer) CASCADE;
DROP FUNCTION IF EXISTS srid(chip) CASCADE;
DROP FUNCTION IF EXISTS st_chip_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS st_chip_out(chip) CASCADE;
DROP FUNCTION IF EXISTS st_compression(chip) CASCADE;
DROP FUNCTION IF EXISTS st_datatype(chip) CASCADE;
DROP FUNCTION IF EXISTS st_factor(chip) CASCADE;
DROP FUNCTION IF EXISTS st_geometry_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS st_height(chip) CASCADE;
DROP FUNCTION IF EXISTS st_postgis_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS st_postgis_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS st_setfactor(chip, real) CASCADE;
DROP FUNCTION IF EXISTS st_srid(chip) CASCADE;
DROP FUNCTION IF EXISTS st_width(chip) CASCADE;
DROP FUNCTION IF EXISTS width(chip) CASCADE;
DROP VIEW IF EXISTS geography_columns CASCADE;
DROP TABLE IF EXISTS geometry_columns CASCADE;
另外,注释掉以下内容:
sed -i 's/^CREATE PROCEDURAL LANGUAGE plpgsql;/-- CREATE PROCEDURAL LANGUAGE plpgsql;/g' db.sql
这看起来像是一个转储问题。但是,我有这个遗留数据库,它是 运行 PostGIS(但不再是)并且在转储中仍然有很多 PostGIS 特定代码。像这样的东西:
CREATE TYPE box2d (
INTERNALLENGTH = 65,
INPUT = box2d_in,
OUTPUT = box2d_out,
ALIGNMENT = int4,
STORAGE = plain
);
和
CREATE FUNCTION _st_concavehull(param_inputgeom geometry) RETURNS geometry
LANGUAGE plpgsql IMMUTABLE STRICT
AS $$
DECLARE
vexhull GEOMETRY;
var_resultgeom geometry;
var_inputgeom geometry;
vexring GEOMETRY;
cavering GEOMETRY;
cavept geometry[];
seglength double precision;
var_tempgeom geometry;
scale_factor integer := 1;
i integer;
BEGIN
-- First compute the ConvexHull of the geometry
vexhull := ST_ConvexHull(param_inputgeom);
var_inputgeom := param_inputgeom;
...
(你懂的)。
我不介意丢失任何 GIS 相关数据,但我不应该丢失这些数据。我也很擅长倾倒和重新加载,尽管不这样做显然更好。
谢谢
FWIW,因为似乎没有官方卸载脚本(据我所知),这是我最终使用的脚本 运行,用于删除所有数据类型和函数创建者:
DROP TYPE IF EXISTS box2d CASCADE;
DROP TYPE IF EXISTS box2df CASCADE;
DROP TYPE IF EXISTS box3d CASCADE;
DROP TYPE IF EXISTS geography CASCADE;
DROP TYPE IF EXISTS geometry CASCADE;
DROP TYPE IF EXISTS geometry_dump CASCADE;
DROP TYPE IF EXISTS gidx CASCADE;
DROP TYPE IF EXISTS pgis_abs CASCADE;
DROP TYPE IF EXISTS spheroid CASCADE;
DROP TYPE IF EXISTS valid_detail CASCADE;
DROP TABLE IF EXISTS spatial_ref_sys CASCADE;
DROP FUNCTION IF EXISTS _postgis_join_selectivity(regclass, text, regclass, text, text) CASCADE;
DROP FUNCTION IF EXISTS _postgis_stats(tbl regclass, att_name text, text) CASCADE;
DROP FUNCTION IF EXISTS checkauth(text, text) CASCADE;
DROP FUNCTION IF EXISTS checkauthtrigger() CASCADE;
DROP FUNCTION IF EXISTS dropgeometrytable(table_name character varying) CASCADE;
DROP FUNCTION IF EXISTS dropgeometrytable(schema_name character varying, table_name character varying) CASCADE;
DROP FUNCTION IF EXISTS geography_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_compress(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_decompress(internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_penalty(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_picksplit(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_union(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_in(cstring[]) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_out(integer) CASCADE;
DROP FUNCTION IF EXISTS geometry_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_compress_2d(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_compress_nd(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_decompress_2d(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_decompress_nd(internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_penalty_2d(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_penalty_nd(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_picksplit_2d(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_picksplit_nd(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_union_2d(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_union_nd(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS geometry_typmod_in(cstring[]) CASCADE;
DROP FUNCTION IF EXISTS geometry_typmod_out(integer) CASCADE;
DROP FUNCTION IF EXISTS gettransactionid() CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_joinsel_2d(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_joinsel_nd(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_sel_2d(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS gserialized_gist_sel_nd(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text, text) CASCADE;
DROP FUNCTION IF EXISTS lockrow(text, text, text, timestamp without time zone) CASCADE;
DROP FUNCTION IF EXISTS postgis_cache_bbox() CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_dims(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_srid(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_constraint_type(geomschema text, geomtable text, geomcolumn text) CASCADE;
DROP FUNCTION IF EXISTS postgis_geos_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_lib_build_date() CASCADE;
DROP FUNCTION IF EXISTS postgis_lib_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_libjson_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_libxml_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_proj_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_build_date() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_installed() CASCADE;
DROP FUNCTION IF EXISTS postgis_scripts_released() CASCADE;
DROP FUNCTION IF EXISTS postgis_svn_version() CASCADE;
DROP FUNCTION IF EXISTS postgis_type_name(geomname character varying, coord_dimension integer, use_new_name boolean) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_dims(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_srid(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_typmod_type(integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_version() CASCADE;
DROP FUNCTION IF EXISTS st_area(text) CASCADE;
DROP FUNCTION IF EXISTS st_asewkt(text) CASCADE;
DROP FUNCTION IF EXISTS st_asgeojson(text) CASCADE;
DROP FUNCTION IF EXISTS st_asgml(text) CASCADE;
DROP FUNCTION IF EXISTS st_askml(text) CASCADE;
DROP FUNCTION IF EXISTS st_assvg(text) CASCADE;
DROP FUNCTION IF EXISTS st_astext(text) CASCADE;
DROP FUNCTION IF EXISTS st_coveredby(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_covers(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_distance(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_dwithin(text, text, double precision) CASCADE;
DROP FUNCTION IF EXISTS st_intersects(text, text) CASCADE;
DROP FUNCTION IF EXISTS st_length(text) CASCADE;
DROP FUNCTION IF EXISTS st_relatematch(text, text) CASCADE;
找到更多:
DROP FUNCTION IF EXISTS box3d_extent_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS box3d_extent_out(box3d_extent) CASCADE;
DROP FUNCTION IF EXISTS chip_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS chip_out(chip) CASCADE;
DROP FUNCTION IF EXISTS compression(chip) CASCADE;
DROP FUNCTION IF EXISTS datatype(chip) CASCADE;
DROP FUNCTION IF EXISTS factor(chip) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_join_selectivity(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS geography_gist_selectivity(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_dims(integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_srid(integer) CASCADE;
DROP FUNCTION IF EXISTS geography_typmod_type(integer) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS geometry_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS height(chip) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_compress(internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_decompress(internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_penalty(internal, internal, internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_picksplit(internal, internal) CASCADE;
DROP FUNCTION IF EXISTS lwgeom_gist_union(bytea, internal) CASCADE;
DROP FUNCTION IF EXISTS postgis_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS postgis_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS postgis_uses_stats() CASCADE;
DROP FUNCTION IF EXISTS setfactor(chip, real) CASCADE;
DROP FUNCTION IF EXISTS setsrid(chip, integer) CASCADE;
DROP FUNCTION IF EXISTS srid(chip) CASCADE;
DROP FUNCTION IF EXISTS st_chip_in(cstring) CASCADE;
DROP FUNCTION IF EXISTS st_chip_out(chip) CASCADE;
DROP FUNCTION IF EXISTS st_compression(chip) CASCADE;
DROP FUNCTION IF EXISTS st_datatype(chip) CASCADE;
DROP FUNCTION IF EXISTS st_factor(chip) CASCADE;
DROP FUNCTION IF EXISTS st_geometry_analyze(internal) CASCADE;
DROP FUNCTION IF EXISTS st_height(chip) CASCADE;
DROP FUNCTION IF EXISTS st_postgis_gist_joinsel(internal, oid, internal, smallint) CASCADE;
DROP FUNCTION IF EXISTS st_postgis_gist_sel(internal, oid, internal, integer) CASCADE;
DROP FUNCTION IF EXISTS st_setfactor(chip, real) CASCADE;
DROP FUNCTION IF EXISTS st_srid(chip) CASCADE;
DROP FUNCTION IF EXISTS st_width(chip) CASCADE;
DROP FUNCTION IF EXISTS width(chip) CASCADE;
DROP VIEW IF EXISTS geography_columns CASCADE;
DROP TABLE IF EXISTS geometry_columns CASCADE;
另外,注释掉以下内容:
sed -i 's/^CREATE PROCEDURAL LANGUAGE plpgsql;/-- CREATE PROCEDURAL LANGUAGE plpgsql;/g' db.sql