2013-07-19 73 views
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中列的值。 mviews的瀏覽器列如何使用For或While? 相同:如何瀏覽Posgresql中的Row列?

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

我不明白你的問題:「mviews的瀏覽器列如何用於For或While?」你能澄清一下嗎? –

回答

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; 
+0

我認爲從OP引用的示例直接來自9.0文檔: http://www.postgresql.org/docs/9.0/static/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING – bma