You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从catalog表查询SORTKEY定义及解决svv_table_info使用报错

Redshift SORTKEY配置获取解决方案

方案1:直接查询底层系统catalog获取完整SORTKEY配置

SORTKEY的模式配置存储在pg_class系统表的reloptions数组字段中,结合pg_attribute的attsortkeyord字段即可完整判断配置类型,无需依赖svv_table_info:

  • reloptions中存在auto_sortkey=all → 对应SORTKEY AUTO(ALL)
  • reloptions中存在auto_sortkey=even → 对应SORTKEY AUTO(EVEN)
  • 无auto_sortkey参数且存在attsortkeyord>0的列 → 手动指定排序键模式,按attsortkeyord顺序拼接列名即可

可直接用于自定义视图的参考查询如下:

WITH sortkey_base_config AS (
    SELECT 
        c.oid AS table_oid,
        n.nspname AS schema_name,
        c.relname AS table_name,
        CASE 
            WHEN EXISTS (SELECT 1 FROM unnest(c.reloptions) opt WHERE opt = 'auto_sortkey=all') THEN 'AUTO(ALL)'
            WHEN EXISTS (SELECT 1 FROM unnest(c.reloptions) opt WHERE opt = 'auto_sortkey=even') THEN 'AUTO(EVEN)'
            ELSE 'MANUAL'
        END AS sortkey_type
    FROM pg_catalog.pg_class c
    JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
    WHERE c.relkind = 'r' -- 过滤普通业务表,排除视图、系统表等
)
SELECT 
    s.schema_name,
    s.table_name,
    CASE 
        WHEN s.sortkey_type != 'MANUAL' THEN 'SORTKEY ' || s.sortkey_type
        ELSE 'SORTKEY(' || string_agg(a.attname, ',' ORDER BY a.attsortkeyord) || ')'
    END AS full_sortkey_definition
FROM sortkey_base_config s
LEFT JOIN pg_catalog.pg_attribute a 
    ON a.attrelid = s.table_oid 
    AND a.attsortkeyord > 0 
    AND a.attisdropped = false
GROUP BY s.schema_name, s.table_name, s.sortkey_type;

该查询所有调用的函数均为Redshift支持在视图定义中使用的标准函数,不会触发函数不支持报错。

方案2:解决svv_table_info调用函数报错的问题

该报错是Redshift对系统视图的上下文调用限制导致的,可通过中转层规避:

  • 单次使用场景:先将svv_table_info结果写入临时表,再对临时表调用处理函数即可
    CREATE TEMP TABLE temp_table_info AS SELECT * FROM svv_table_info;
    -- 后续对temp_table_info使用text、format_type等函数无限制
    
  • 长期使用场景:创建定期刷新的物化视图存储svv_table_info的结果,自定义视图直接读取该物化视图即可。

内容的提问来源于stack exchange,提问作者hemant A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:36:04