如何列出一行的列?

时间:2013-07-19 13:43:14

标签: postgresql plpgsql

CREATE FUNCTION cs_refresh_mviews() RETURNS integer AS $$
DECLARE
    mviews RECORD;
BEGIN
    PERFORM cs_log('Refreshing materialized views...');

    FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP

       -- How For columns of mviews?

    END LOOP;

    PERFORM cs_log('Done refreshing materialized views.');
    RETURN 1;
END;
$$ LANGUAGE plpgsql;

我想在mviews中获取列的值。 mviews的浏览器列如何用于For或While? 同样如下:

For i=0 to mviews.columns.count step i++
    raise  mviews[i]

1 个答案:

答案 0 :(得分:0)

物化观点,真的吗?你已经在9.3了吗?
无论如何你的问题不是很清楚,你是否试图迭代每个视图中的所有列?

信息架构和information_schema.columns尤其可以是您正在寻找的。

假设您在cs_materialized_views表中有一些schemaname字段,您可以执行以下操作:

声明另一个记录变量:mcols RECORD;

把它放在你的循环中:

FOR mcols IN (SELECT ordinal_position, column_name FROM information_schema.columns WHERE table_schema = mviews.schema AND table_name = mviews.name ORDER BY ordinal_position) LOOP
    RAISE NOTICE 'View %, Column no. %: %', mviews.table_name, mcols.ordinal_position, mcols.column_name;
END LOOP;