From: Sandro Santilli Date: Tue, 2 Mar 2004 11:37:04 +0000 (+0000) Subject: modified to reflect new statistics building process for PG75 X-Git-Tag: pgis_0_8_2~101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f9c821dd12706dd0ded194e7ace8b8a3a05d0984;p=postgis modified to reflect new statistics building process for PG75 git-svn-id: http://svn.osgeo.org/postgis/trunk@458 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/postgis.sql.in b/postgis.sql.in index c58bd80bb..5efb5693e 100644 --- a/postgis.sql.in +++ b/postgis.sql.in @@ -732,9 +732,11 @@ CREATE TABLE geometry_columns ( coord_dimension integer not null, srid integer not null, type varchar(30) not null, +#if USE_VERSION < 75 attrelid oid, varattnum int, stats histogram2d, +#endif CONSTRAINT geometry_columns_pk primary key ( f_table_catalog, f_table_schema, @@ -3583,37 +3585,27 @@ CREATE CAST ( geometry AS text ) WITH FUNCTION astext(geometry); -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- UPDATE_GEOMETRY_STATS() +-- +-- This is no more needed, running ANALYZE will store +-- geometry attributes statistics in system tables. +-- It is kept for back compatibility, will raise a message. +-- CREATE FUNCTION update_geometry_stats() RETURNS text AS ' -BEGIN - EXECUTE ''update geometry_columns set attrelid = (select pg_class.oid AS attrelid from pg_class,pg_attribute where relname =geometry_columns.f_table_name::name and pg_attribute.attrelid = pg_class.oid and pg_attribute.attname = geometry_columns.f_geometry_column::name), varattnum = (select pg_attribute.attnum from pg_class,pg_attribute where relname =geometry_columns.f_table_name::name and pg_attribute.attrelid = pg_class.oid and pg_attribute.attname = geometry_columns.f_geometry_column::name)''; - execute ''update geometry_columns set stats = (build_histogram2d( create_histogram2d(find_extent(f_table_name,f_geometry_column),40 ),f_table_name::text, f_geometry_column::text)) ''; - return ''done''; -END; + SELECT ''update_geometry_stats() has been obsoleted. Statistics are automatically built running the ANALYZE command''::text ' -LANGUAGE 'plpgsql' ; - --- - - - - - - - - - - - - - - - - - - - - - - - - - - - --- UPDATE_GEOMETRY_STATS( , ) +LANGUAGE 'sql' ; CREATE FUNCTION update_geometry_stats(varchar,varchar) RETURNS text AS ' -DECLARE - tablename aliAS for $1; - columnname aliAS for $2; - -BEGIN - EXECUTE ''update geometry_columns set attrelid = (select pg_class.oid AS attrelid from pg_class,pg_attribute where relname =geometry_columns.f_table_name::name and pg_attribute.attrelid = pg_class.oid and pg_attribute.attname = geometry_columns.f_geometry_column::name), varattnum = (select pg_attribute.attnum from pg_class,pg_attribute where relname =geometry_columns.f_table_name::name and pg_attribute.attrelid = pg_class.oid and pg_attribute.attname = geometry_columns.f_geometry_column::name)''; - execute ''update geometry_columns set stats = (build_histogram2d( create_histogram2d(find_extent(''|| quote_literal(tablename) || '',''||quote_literal(columnname) ||''),40 ),''|| quote_literal(tablename) || ''::text,''||quote_literal(columnname) ||''::text )) WHERE f_table_name=''|| quote_literal(tablename) || ''and f_geometry_column=''||quote_literal(columnname) ; - return ''done''; -END; + SELECT update_geometry_stats(); ' -LANGUAGE 'plpgsql' ; +LANGUAGE 'sql' ; -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- CREATE_HISTOGRAM2D( , ) @@ -3764,24 +3756,6 @@ BEGIN WHERE f_table_schema is NULL or f_table_schema NOT IN ( SELECT nspname::varchar FROM pg_namespace ); - UPDATE geometry_columns SET attrelid = ( - SELECT c.oid - FROM pg_class c, pg_attribute a, pg_namespace n - WHERE c.relname = geometry_columns.f_table_name::name - AND a.attrelid = c.oid AND c.relnamespace = n.oid - AND a.attname = geometry_columns.f_geometry_column::name - AND n.nspname = geometry_columns.f_table_schema::name - ); - - UPDATE geometry_columns SET varattnum = ( - SELECT a.attnum - FROM pg_class c, pg_attribute a, pg_namespace n - WHERE n.nspname = geometry_columns.f_table_schema::name - AND c.relname = geometry_columns.f_table_name::name - AND a.attname = geometry_columns.f_geometry_column::name - AND a.attrelid = c.oid AND c.relnamespace = n.oid - ); - RETURN ''geometry_columns table is now linked to the system tables'';