Postgres导入到RDS:无法执行查询:错误:键入" earth"不存在

时间:2018-04-07 01:39:00

标签: postgresql amazon-rds postgresql-9.4 postgresql-9.6

在将pg_restore写入RDS实例时遇到问题。

Source DB:一个dockerized PG9.4实例。

pg_dump -Fc -h localhost -p 5432 -U user --no-synchronized-snapshot -Fd --jobs 2 dbname --file="/pgdump/dbname_fd"

目标数据库:RDS PG9.6实例:

#drop and recreate databases with proper ownership
export PGPASSWORD=''
psql -h $pgHost -U dbname postgres -c 'DROP DATABASE dbname;'
export PGPASSWORD=''
psql -h $pgHost -U rdspostgresmaster postgres -c 'create database dbname;'
psql -h $pgHost -U rdspostgresmaster postgres -c 'alter database dbname owner to dbname;'

# Drop extensions
psql -h $pgHost -U rdspostgresmaster postgres -c 'DROP EXTENSION IF EXISTS hstore;
DROP EXTENSION IF EXISTS earthdistance;
DROP EXTENSION IF EXISTS postgis;
DROP EXTENSION IF EXISTS ltree;
DROP EXTENSION IF EXISTS plpgsql;'

# Install superuser extensions
psql -h $pgHost -U rdspostgresmaster postgres -c 'CREATE EXTENSION IF NOT EXISTS hstore;'
psql -h $pgHost -U rdspostgresmaster postgres -c 'CREATE EXTENSION IF NOT EXISTS earthdistance with cascade;;'
psql -h $pgHost -U rdspostgresmaster postgres -c 'CREATE ROLE IF NOT EXISTS postgres;'
psql -h $pgHost -U rdspostgresmaster postgres -c 'GRANT rds_superuser to postgres'
psql -h $pgHost -U rdspostgresmaster postgres -c 'GRANT ALL ON SCHEMA public TO postgres;'

# dbname permissions
psql -h $pgHost -U rdspostgresmaster postgres -c 'grant rds_superuser to dbname'
psql -h $pgHost -U rdspostgresmaster postgres -c 'GRANT postgres to dbname;'

#connect as dbname user and add extensions
export PGPASSWORD=''
psql -h $pgHost -U dbowner dbname -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS cube;
CREATE EXTENSION IF NOT EXISTS earthdistance with cascade;
CREATE EXTENSION IF NOT EXISTS ltree;
CREATE EXTENSION IF NOT EXISTS plpgsql;'

###Restore
export PGPASSWORD=''
pg_restore -h $pgHost -U dbowner --jobs=4 -d dbname -Fd /pgdump/dbname_fd

获得以下内容:

pg_restore: [archiver (db)] Error from TOC entry 4623; 1259 39684305 INDEX location_search_ll_to_earth_gist dbname
pg_restore: [archiver (db)] could not execute query: ERROR:  type "earth" does not exist
LINE 1: ...ians($1))*sin(radians($2))),earth()*sin(radians($1)))::earth
                                                              ^
QUERY:  SELECT cube(cube(cube(earth()*cos(radians($1))*cos(radians($2))),earth()*cos(radians($1))*sin(radians($2))),earth()*sin(radians($1)))::earth
CONTEXT:  SQL function "ll_to_earth" during inlining
Command was: CREATE INDEX location_search_ll_to_earth_gist ON public.location_search USING gist (public.ll_to_earth((latitude)::double pr...

我的其他扩展似乎工作得很好,但是那个"地球"类型是麻烦。我已经尝试在进程中的各个点安装扩展(注释掉任一个CREATE EXTENSION块,对于instand),作为RDS postgres master或dbowner用户,两次都会收到此错误。我还试图在我的转储中进行磨练并恢复到公共或dbname架构。

我是否需要做些什么来使扩展能够与公共模式一起使用?

0 个答案:

没有答案