[postgis-users] Restoring db with indexes using PostGIS functions
Mark Cave-Ayland
mark.cave-ayland at siriusit.co.uk
Tue Sep 30 03:01:32 PDT 2008
Mike Leahy wrote:
> Hello list,
>
> I ran into a problem today when restoring a database of mine - I'm not
> sure if this is anything new, or if I'm doing something I shouldn't be
> doing. I have in my db a variety of tables that are stored in separate
> schemas. Some of these tables have geometry columns that I am using to
> store variable geometry types, but since most of the queries on these
> tables generally focus on one geometry type at a time, I added indexes
> to them as follows:
>
> CREATE INDEX mytable_geomtype_idx ON schemaname.mytable USING btree
> (st_geometrytype(geom));
>
> However, when I dump the database, the resulting sql sets search paths
> rather than explicitly naming schema.table in each statement.
> Effectively, this is what happens when the dumped sql is loaded into a
> new database:
>
> mydb=# SET search_path = schemaname, pg_catalog;
> SET
> mydb=# CREATE INDEX mytable_geomtype_idx ON mytable USING btree
> (public.st_geometrytype(geom));
> ERROR: function geometrytype(public.geometry) does not exist
> LINE 1: SELECT geometrytype( $1 )
> ^
> HINT: No function matches the given name and argument types. You might
> need to add explicit type casts.
> QUERY: SELECT geometrytype( $1 )
> CONTEXT: PL/pgSQL function "st_geometrytype" line 6 during statement
> block local variable initialization
> mydb=#
>
> It seems that setting the search path has undesirable effects with the
> st_geometrytype function (I don't know if the same happens with other
> functions). I suspect 'geometrytype( $1 )' would have to be substituted
> with 'public.geometrytype( $1 )' for this to work.
>
> Is this just something I should be aware of? It's not a show-stopper
> for me at the moment, but it means that I'd have to manually recreate
> any indexes like the one above if performance became an issue after
> restoring the database (not in my current situation, but maybe down the
> road).
>
> Regards,
> Mike
Hi Mike,
If you are using newer PostgreSQL releases, there was an issue a while
back where the use of search_path within stored procedures was
restricted to stop people from overriding in-built stored procedures.
Otherwise it could simply be that the dump ordering is wrong, and
altering the restore order so that geometrytype() is restored *before*
ST_geometrytype should resolve the issue.
HTH,
Mark.
--
Mark Cave-Ayland
Sirius Corporation - The Open Source Experts
http://www.siriusit.co.uk
T: +44 870 608 0063
More information about the postgis-users
mailing list