---------------------------------------------------------------\r
-- GEOMETRY_COLUMNS view\r
---------------------------------------------------------------\r
-CREATE OR REPLACE VIEW geometry_columns_v AS\r
- SELECT\r
- current_database() AS f_table_catalog, \r
- n.nspname AS f_table_schema, \r
- c.relname AS f_table_name, \r
- a.attname AS f_geometry_column,\r
- postgis_typmod_dims(a.atttypmod) AS coord_dimension,\r
- postgis_typmod_srid(a.atttypmod) AS srid,\r
- postgis_typmod_type(a.atttypmod) AS type\r
- FROM \r
- pg_class c, \r
- pg_attribute a, \r
- pg_type t, \r
- pg_namespace n\r
- WHERE t.typname = 'geometry'\r
- AND a.attisdropped = false\r
- AND a.atttypid = t.oid\r
- AND a.attrelid = c.oid\r
- AND c.relnamespace = n.oid\r
- AND ( c.relkind = 'r' OR c.relkind = 'v' )\r
- AND NOT pg_is_other_temp_schema(c.relnamespace);\r
+CREATE FUNCTION postgis_constraint_srid(geomschema text, geomtable text, geomcolumn text) RETURNS integer AS\r
+$$\r
+SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '')::integer\r
+ FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s\r
+ WHERE n.nspname = $1\r
+ AND c.relname = $2\r
+ AND a.attname = $3\r
+ AND a.attrelid = c.oid\r
+ AND s.connamespace = n.oid\r
+ AND s.conrelid = c.oid\r
+ AND a.attnum = ANY (s.conkey)\r
+ AND s.consrc LIKE '%srid(% = %';\r
+$$\r
+LANGUAGE 'sql' STABLE STRICT;\r
+\r
+CREATE OR REPLACE FUNCTION postgis_constraint_type(geomschema text, geomtable text, geomcolumn text) RETURNS varchar AS\r
+$$\r
+SELECT replace(split_part(s.consrc, '''', 2), ')', '')::varchar\r
+ FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s\r
+ WHERE n.nspname = $1\r
+ AND c.relname = $2\r
+ AND a.attname = $3\r
+ AND a.attrelid = c.oid\r
+ AND s.connamespace = n.oid\r
+ AND s.conrelid = c.oid\r
+ AND a.attnum = ANY (s.conkey)\r
+ AND s.consrc LIKE '%geometrytype(% = %';\r
+$$\r
+LANGUAGE 'sql' STABLE STRICT;\r
+\r
+CREATE OR REPLACE FUNCTION postgis_constraint_dims(geomschema text, geomtable text, geomcolumn text) RETURNS integer AS\r
+$$\r
+SELECT replace(split_part(s.consrc, ' = ', 2), ')', '')::integer\r
+ FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s\r
+ WHERE n.nspname = $1\r
+ AND c.relname = $2\r
+ AND a.attname = $3\r
+ AND a.attrelid = c.oid\r
+ AND s.connamespace = n.oid\r
+ AND s.conrelid = c.oid\r
+ AND a.attnum = ANY (s.conkey)\r
+ AND s.consrc LIKE '%ndims(% = %';\r
+$$\r
+LANGUAGE 'sql' STABLE STRICT;\r
+\r
+CREATE OR REPLACE VIEW geometry_columns_v AS \r
+ SELECT current_database()::varchar(256) AS f_table_catalog, \r
+ n.nspname::varchar(256) AS f_table_schema, \r
+ c.relname::varchar(256) AS f_table_name, \r
+ a.attname::varchar(256) AS f_geometry_column, \r
+ COALESCE(NULLIF(postgis_typmod_dims(a.atttypmod),2), postgis_constraint_dims(n.nspname, c.relname, a.attname), 2) AS coord_dimension, \r
+ COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod),0), postgis_constraint_srid(n.nspname, c.relname, a.attname), 0) AS srid, \r
+ COALESCE(NULLIF(postgis_typmod_type(a.atttypmod), 'Geometry'), postgis_constraint_type(n.nspname, c.relname, a.attname), 'Geometry')::varchar(30) AS type\r
+ FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n\r
+ WHERE t.typname = 'geometry'::name \r
+ AND a.attisdropped = false \r
+ AND a.atttypid = t.oid \r
+ AND a.attrelid = c.oid \r
+ AND c.relnamespace = n.oid \r
+ AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") AND NOT pg_is_other_temp_schema(c.relnamespace);\r
#endif\r
\r
\r