0
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 の列の値を取得したい。mview のブラウザー列は For または While にどのように使用されますか? と同じ:

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

1 に答える 1

0

マテリアライズド ビュー、本当に?すでに 9.3 を使用していますか?
とにかく、あなたの質問はあまり明確ではありません。各ビューのすべての列を反復しようとしていますか?

特に情報スキーマとinformation_schema.columnsは、探しているものになる可能性があります。

cs_materialized_views テーブルにフィールドがいくつかあると仮定するとschemaname次のようなことができます。

別の Record 変数を宣言します。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;
于 2013-07-19T15:19:19.997 に答える