ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 概述 - file_fdw 为数据库自带的扩展 ## 语法 options 选项 - `filename` - 指定要被读取的文件。相对路径是相对于pg的data目录。 必须指定filename或program, 但不能同时指定两个。 - `program` - 指定要执行的命令。该命令的标准输出将被读取, 就像使用COPY FROM PROGRAM一样。必须指定program 或filename,但不能同时指定两个 - `format` - 指定数据的格式,和COPY的FORMAT选项相同。 - `header` - 指定数据是否具有一个头部行,和COPY的HEADER选项相同。 - `delimiter` - 指定数据的定界符字符,和COPY的DELIMITER选项相同。 - `quote` - 指定数据的引用字符,和COPY的QUOTE选项相同。 - `escape` - 指定数据的转义字符,和COPY的ESCAPE选项相同。 - `null` - 指定数据的空字符串,和COPY的NULL选项相同。 - `encoding` - 指定数据的编码,和COPY的ENCODING选项相同。 ## 开启扩展 ``` CREATE EXTENSION file_fdw; ``` ## 开启一个外部服务 ``` CREATE SERVER fs FOREIGN DATA WRAPPER file_fdw; ``` ## 示例 ### 获取系统状态 通过对系统命令获取系统进程 ``` DROP FOREIGN TABLE process_status ; CREATE FOREIGN TABLE process_status ( username TEXT, pid INTEGER, cpu NUMERIC, mem NUMERIC, vsz BIGINT, rss BIGINT, tty TEXT, stat TEXT, start TEXT, time TEXT, command TEXT ) SERVER pglog OPTIONS ( PROGRAM $$ps aux | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11}' OFS='\037'$$, FORMAT 'csv', DELIMITER E'\037', HEADER 'TRUE'); ``` ### 查看系统用户 ``` DROP FOREIGN TABLE etc_password ; CREATE FOREIGN TABLE etc_password ( username TEXT, password TEXT, user_id INTEGER, group_id INTEGER, user_info TEXT, home_dir TEXT, shell TEXT ) SERVER pglog OPTIONS ( PROGRAM $$awk -F: 'NF && !/^[:space:]*#/ {print $1,$2,$3,$4,$5,$6,$7}' OFS='\037' /etc/passwd$$, FORMAT 'csv', DELIMITER E'\037' ); ``` ### cvs 文件 demo.cvs ``` a1 abc a2 abcd ``` 把文件复制到 pgsql 的data 目录 如`/var/lib/pgsql/15/data`,分隔符采用空格 ``` DROP FOREIGN TABLE demo_cvs; CREATE FOREIGN TABLE demo_cvs ( username TEXT, password TEXT ) SERVER pglog OPTIONS ( filename 'demo.cvs', FORMAT 'csv', DELIMITER E' ' ); ```