2016-12-17 12 views
0

OSファイルシステムからファイルを読み込み、その内容をテーブルとして出力したいと考えています。最も好ましい方法はplperlの使用です(tempテーブルを使用する必要はなく、ほとんどのpostgresインストールではplperlはデフォルトで組み込まれています)。しかし残念ながら私はperlに精通しておらず、私の機能はうまくいかない。それはファイルを読み込んだものの、何も印刷しません。ファイルを読み込んでpostgresql plperlで印刷

機能体をチェックして、間違いはどこですか?

CREATE OR REPLACE FUNCTION public.file_read(text) 
    RETURNS table(maj int, min int, dev text, reads bigint, rmerges bigint, rsects bigint, rspent bigint, writes bigint, wmerges bigint, wsects bigint, wspent bigint, inprog bigint, spent bigint, weighted bigint) AS 
    $$ 
    open (datfile, $_[0]); 
    while ($line = <$datfile>) { 
     chomp $line; 
     @line = split(/\s+/, $line); 

     return_next({maj => $line[0], min => $line[1], dev => $line[2], 
        reads => $line[3], rmerges => $line[4], rsects => $line[5], rspent => $line[6], 
        writes => $line[7], wmerges => $line[8], wsects => $line[9], wspent => $line[10], 
        inprog => $line[11], spent => $line[12], weighted => $line[13] 
        }); 
    } 
    close (datfile); 
    return undef; 
    $$ LANGUAGE plperlu; 

# select * from file_read('/proc/diskstats'); 
maj | min | dev | reads | rmerges | rsects | rspent | writes | wmerges | wsects | wspent | inprog | spent | weighted 
-----+-----+-----+-------+---------+--------+--------+--------+---------+--------+--------+--------+-------+---------- 
(0 rows) 

ありがとう!

+0

なぜ 'file_fdw'で外部テーブルを使用しないのですか:https://www.postgresql.org/docs/current/static/file-fdw.html –

+0

/procにはたくさんの統計ファイルがあります。 file_fdwは、/ proc/meminfoや/ proc/net/devのように、これらのファイルのいくつかを処理できません。それは私にはplperl関数のセットは普遍的な解決策になると思われる。 – lesovsky

答えて

0

問題は、hereと記載されているPavel Styehuleの関数の例を使用して完全に解決されました。

関連する問題