0
OS 파일 시스템에서 파일을 읽고 해당 내용을 테이블로 인쇄하려고합니다. 가장 좋은 방법은 plperl을 사용하는 것입니다 (왜냐하면 임시 테이블을 사용할 필요가 없기 때문이며 plperl은 대부분의 postgres 설치에서 기본적으로 내장되어 있기 때문입니다). 하지만 불행히도 필자는 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)
감사합니다.
왜 'file_fdw'와 함께 외래 테이블을 사용하지 않습니까? https://www.postgresql.org/docs/current/static/file-fdw.html –
/proc에 많은 통계 파일이 있고 file_fdw는/proc/meminfo 또는/proc/net/dev와 같은 파일 중 일부를 처리 할 수 없습니다. plpperl 함수 세트가 보편적 인 솔루션이 될 것 같습니다. – lesovsky