学习PostgreSQL的FDW(#6)-file_fdw源码分析
之前文章介绍了实现FDW的函数,现在来看看PostgreSQL实现的文件的FDW是怎么的吧。
PostgreSQL实现的file_fdw的源码可以在PostgreSQL的源码目录下contrib目录下找到。
简介
file_fdw支持的数据文件必须是COPY FROM
可读格式(text,csv[逗号分隔值],binary).
用这个包装器创建的一个外部表可以有下列选项:
参数 | 说明 |
---|---|
filename | 指定要被读取的文件。必须是一个绝对路径名。 必须指定filename或program, 但不能同时指定两个。 |
program | 指定要执行的命令。该命令的标准输出将被读取, 就像使用COPY FROM PROGRAM一样。必须指定program 或filename,但不能同时指定两个。 |
format | 指定数据的格式,和COPY的FORMAT选项相同。即text,csv(逗号分隔值),binary |
header | 指定文件包含标题行,其中有每一列的名称。在输出时,第一行包含 来自表的列名。在输入时,第一行会被忽略。只有使用 CSV格式时才允许这个选项。 |
delimiter | 指定分隔文件每行中各列的字符。文本格式中默认是一个制表符, 而CSV格式中默认是一个逗号。这必须是一个单一 的单字节字符。使用binary格式时不允许这个选项。 |
quote | 指定一个数据值被引用时使用的引用字符。默认是双引号。 这必须是一个单一的单字节字符。只有使用 CSV格式时才允许这个选项。 |
escape | 指定应该出现在一个匹配quote值的数据字符之前 的字符。默认和quote值一样(这样如果引用字符 出现在数据中,它会被双写)。这必须是一个单一的单字节字符。 只有使用CSV格式时才允许这个选项。 |
null | 指定表示一个空值的字符串。文本格式中默认是 \N(反斜线-N),CSV格式中默认 是一个未加引用的空串。在你不想区分空值和空串的情况下,即使在文本 格式中你也可能更喜欢空串。使用binary格式时不允许这 个选项。 |
encoding | 指定文件被以encoding_name编码。如果省略这个选项,将使用当前的客户端编码。 |
添加file_fdw扩展
检查PG安装目录的lib/postgresql目录下是否存在file_fdw.so文件,确保安装时已经编译安装了file_fdw扩展。
1 | fdw=# create extension file_fdw ; |
测试file_fdw
1 | fdw=# --创建测试表,并添加数据 |
数据结构
- FileFdwOption
1 | /* |
1 | /* |
- FileFdwPlanState
1 | /* |
- FileFdwExecutionState
1 | /* |
函数
- fileIsForeignScanParallelSafe
1 | /* |
- fileGetForeignRelSize
1 | /* |
- estimate_size
1 | /* |
- fileGetForeignPaths
1 | /* |
- estimate_costs
1 | /* |
- fileGetForeignPlan
1 | /* |
未完待续