Chế độ xem cụ thể hóa không xuất hiện trong chế độ xem Geometry_Columns


12

Tôi đã xác định chế độ xem cụ thể hóa trong cơ sở dữ liệu hỗ trợ PostGIS 2.1 chạy PostgreQuery 9.3.1:

CREATE MATERIALIZED VIEW canvec_data.contours_m AS 
 SELECT
    contours_original.ogc_fid, 
    contours_original.elevation::integer AS elevation_orig, 
    CASE
        WHEN "substring"(contours_original.code::text, 1, 3) = '257'::text THEN round(contours_original.elevation::double precision * 0.3048::double precision)
        ELSE contours_original.elevation::double precision
    END AS elevation_m, 
    contours_original.wkb_geometry::geometry(Linestring,3578)
 FROM canvec_data.contours_original

Có lẽ tôi đã nhầm, dự kiến ​​rằng thực thể kết quả này (một bảng?) Sẽ được liệt kê trong public.geometry_columnschế độ xem và do đó được giải thích chính xác bởi phần mềm trình xem GIS như QGIS.

Chế độ xem cụ thể hóa không xuất hiện trong public.geometry_columnschế độ xem.

Tôi đang làm gì sai?

Cảm ơn!

Câu trả lời:


16

Bạn không làm gì sai, bạn đã phát hiện ra một lỗ hổng trong hỗ trợ của chúng tôi cho tính năng xem được cụ thể hóa mới của PostgreQuery 9.3. Tôi đã vá tất cả các chi nhánh có liên quan và bạn có thể tự cập nhật định nghĩa về hình học_columns (xem các tham chiếu thay đổi trong vé này http://trac.osgeo.org/postgis/ticket/2511 )

Trên thực tế, đây là thứ bạn có thể dán vào cửa sổ SQL:

CREATE OR REPLACE VIEW geometry_columns AS 
  SELECT current_database()::varchar(256) AS f_table_catalog, 
    n.nspname::varchar(256) AS f_table_schema, 
    c.relname::varchar(256) AS f_table_name, 
    a.attname::varchar(256) AS f_geometry_column, 
    COALESCE(NULLIF(postgis_typmod_dims(a.atttypmod),2),
             postgis_constraint_dims(n.nspname, c.relname, a.attname),
             2) AS coord_dimension, 
    COALESCE(NULLIF(postgis_typmod_srid(a.atttypmod),0),
             postgis_constraint_srid(n.nspname, c.relname, a.attname),
             0) AS srid, 
    -- force to be uppercase with no ZM so is backwards compatible
    -- with old geometry_columns
    replace(
      replace(
        COALESCE(
          NULLIF(upper(postgis_typmod_type(a.atttypmod)::text), 'GEOMETRY'),
          postgis_constraint_type(n.nspname, c.relname, a.attname),
          'GEOMETRY'
        ), 'ZM', ''
      ), 'Z', ''
    )::varchar(30) AS type
  FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n
  WHERE t.typname = 'geometry'::name 
    AND a.attisdropped = false 
    AND a.atttypid = t.oid 
    AND a.attrelid = c.oid 
    AND c.relnamespace = n.oid 
    AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char" OR c.relkind = 'm'::"char")
    AND NOT pg_is_other_temp_schema(c.relnamespace)
    AND NOT ( n.nspname = 'public' AND c.relname = 'raster_columns' )
    AND has_table_privilege( c.oid, 'SELECT'::text );

5
Trả lời và sửa chữa tuyệt vời; đó là dịch vụ khách hàng ...
DEWright
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.