如何反省物化视图

sha*_*unc 10 postgresql materialized-views information-schema postgresql-9.3

我有一个实用程序,使用以下内容来检查表的列:

select column_name, data_type from information_schema.columns
        where table_name=%s
Run Code Online (Sandbox Code Playgroud)

如何将其扩展到物化视图的内省列?

Erw*_*ter 12

您的查询有一些缺点/改进空间:

  • 表名在数据库中不是唯一的,您必须缩小到特定模式,否则可能会出现令人惊讶/误导/完全不正确的结果.
    将(可选)模式限定的表名转换为regclass... 更加有效/方便,见下文.

  • regtype的强制转换为您提供泛型类型名称而不是内部类型名称.但那仍然只是基本类型.
    使用系统目录信息函数format_type()来获取包含修饰符的确切类型名称.

  • 通过上述改进,您无需加入其他表.只是pg_attribute.

  • 删除的列驻留在目录中,直到表被抽真空(完全).你需要排除这些.

SELECT attname, atttypid::regtype AS base_type
              , format_type(atttypid, atttypmod) AS full_type
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    attnum > 0
AND    NOT attisdropped;  -- no dead columns
Run Code Online (Sandbox Code Playgroud)

顺便说一句:信息模式中的视图仅适用于标准合规性和可移植性(无论如何都很少有效).如果你不打算切换你的RDBMS,坚持使用目录表,这是快-和更完整的,显然.