Move PostGIS extension to a different schema
As of PostGIS 2.3, the postgis extension was changed to no longer allow relocation. All function calls within the extension are now schema qualified.
While this change fixed some issues with database restore, it created the issue of if you installed PostGIS in a schema other than the one you wanted to it is not intuitive how to move it to a different schema. Luckily there is a way to do this.
For this exercise, I will install PostGIS in the default schema and then demonstrate how to move it into another schema location.
You can run these steps using psql or pgAdmin or any other PostgreSQL tool you want.
Most people have their default schema set to
so not explicitly specifying an install schema will generally install
postgis in the
1CREATE EXTENSION postgis;
Now I'll create a new schema to move it and add this schema to search_path
1CREATE SCHEMA postgis; 2 3ALTER DATABASE mydb 4SET search_path = public,postgis;
If you are running PostGIS 2.3 or higher, trying to move to a different schema using the usual step:
1ALTER EXTENSION postgis 2 SET SCHEMA postgis;
will fail with error ERROR: extension "postgis" does not support SET SCHEMA.
To allow the move do these steps:
1UPDATE pg_extension 2 SET extrelocatable = true 3 WHERE extname = 'postgis'; 4 5ALTER EXTENSION postgis 6 SET SCHEMA postgis; 7 8ALTER EXTENSION postgis 9 UPDATE TO "2.4.1next"; 10 11ALTER EXTENSION postgis 12 UPDATE TO "2.4.1";
Note the use of the extension version that includes
next version step is needed in order to upgrade all the schema qualified function references to
the new schema location.
next is designed to allow upgrading a postgis extension to a version it is already on.
Trying to run UPDATE TO "2.4.1" when you are already on 2.4.1 would trigger an error that you are already on that version.