簡體   English   中英

PostgreSQL 中物化視圖的列名和數據類型?

[英]Column names and data types for materialized views in PostgreSQL?

對於一般表和視圖,我可以通過運行以下查詢來查看它們的數據類型:

select data_type from information_schema.columns
where .....

然而,這里似乎沒有關於物化視圖的任何信息。

我可以通過運行來獲取物化視圖的列列表:

    SELECT
      a.attname as column_name
  FROM
      pg_catalog.pg_attribute a
      INNER JOIN
       (SELECT c.oid,
          n.nspname,
          c.relname
        FROM pg_catalog.pg_class c
             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relname ~ ('^(materializedview)$')
          AND pg_catalog.pg_table_is_visible(c.oid)
        ORDER BY 2, 3) b
      ON a.attrelid = b.oid
      INNER JOIN
       (SELECT
            a.attrelid,
            max(a.attnum) as max_attnum
        FROM pg_catalog.pg_attribute a
        WHERE a.attnum > 0
          AND NOT a.attisdropped
        GROUP BY a.attrelid) e
      ON a.attrelid=e.attrelid
  WHERE a.attnum > 0
    AND NOT a.attisdropped
  ORDER BY a.attnum

但是,我無法確定是否可以確定基礎列/數據類型是什么。

有沒有辦法查看這些信息?

我覺得你很親近。 最后一步是加入pg_type

join pg_catalog.pg_type as tp on tp.typelem = a.atttypid

字段tp.typname將具有數據類型。 盡管似乎必須添加過濾器才能刪除line數據類型,但無論如何:

cast(tp.typanalyze as text) = 'array_typanalyze'

我不完全了解底層數據模型,因此請使用下面的解決方案。 無論如何,根據您的貢獻,我最終得到了以下查詢,該查詢使用名稱空間(例如,模式)和關系(例如,物化視圖)名稱獲取列數據類型:

select 
    ns.nspname as schema_name, 
    cls.relname as table_name, 
    attr.attname as column_name,
    trim(leading '_' from tp.typname) as datatype
from pg_catalog.pg_attribute as attr
join pg_catalog.pg_class as cls on cls.oid = attr.attrelid
join pg_catalog.pg_namespace as ns on ns.oid = cls.relnamespace
join pg_catalog.pg_type as tp on tp.typelem = attr.atttypid
where 
    ns.nspname = 'your_schema' and
    cls.relname = 'your_materialized_view' and 
    not attr.attisdropped and 
    cast(tp.typanalyze as text) = 'array_typanalyze' and 
    attr.attnum > 0
order by 
    attr.attnum

您必須更改'your_schema''your_materialized_view'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM