返回首页

gbase数据、南大通用产品文档:GBase8cfile_fdw

更新日期:2024年09月11日

file_fdw 模块提供了外部数据封装器file_fdw,可以用来在服务器的文件系统中访问数
据文件。数据文件必须是COPY FROM 可读的格式;具体可参照COPY 语句的介绍。访问
这样的数据文件当前只是可读的。当前不支持对该数据文件的写入操作。
当前GBase 8c 会默认编译file_fdw,
在initdb 的时候会在pg_catalog schema 中创建该插

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1142
件。
使用file_fdw 创建的外部表可以有下列选项:
-
**filename**
指定要读取的文件,必需的参数,且必须是一个绝对路径名。
-
**format**
远端server 的文件格式,支持text/csv/binary 三种格式,和COPY 语句的FORMAT
选项相同。
-
**header**
指定的文件是否有标题行,与COPY 语句的HEADER 选项相同。
-
**delimiter**
指定文件的分隔符,与COPY 的DELIMITER 选项相同。
-
**quote**
指定文件的引用字符,与COPY 的QUOTE 选项相同。
-
**escape**
指定文件的转义字符,与COPY 的ESCAPE 选项相同。
-
**null**
指定文件的null 字符串,与COPY 的NULL 选项相同。
-
**encoding**
指定文件的编码,与COPY 的ENCODING 选项相同。
-
**force\_not\_null**
这是一个布尔选项。如果为真,则声明字段的值不应该匹配空字符串(也就是,文
件级别null 选项)。与COPY 的FORCE\_NOT\_NULL 选项里的字段相同。
file_fdw 不支持COPY 的OIDS 和FORCE_QUOTE 选项。
注意这些选项只能为外部表或它的字段声明,
不是在file_fdw 外部数据封装器的选项里,
也不是在使用该封装器的服务器或用户映射的选项里。
修改表级别的选项需要系统管理员权限,
因为安全原因:
只有系统管理员用户能够决定
读哪个文件。
对于一个使用file_fdw 的外部表,EXPLAIN 显示要读取的文件名。除非指定了COSTS
OFF,否则也显示文件大小(字节计)。

使用 FILLFACTOR 配置参数来指定索引页的充满程度。低值提供索引中的成长空间。高值
压缩索引。
如果索引充满(100%),则任何新插入都会导致分裂节点。您还可设置 FILLFACTOR 作为
CREATE INDEX 语句的选项。在 CREATE INDEX 语句上的设置取代 ONCONFIG 文件值。
您不可将 FILLFACTOR 配置参数用于树状索引的森林。
onconfig.std 值
FILLFACTOR 90

1 - 100
单位
百分比
生效
当构建索引时。现有的索引不更改。要使用新值,就必须重新构建索引。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。

EXIT 语句可以终止 FOR 、FOREACH 、LOOP 或 WHILE 语句。
语法

元素
描述
限制
语法
condition
当此计算为
TRUE 时循环
终止
如果 condition 计算为 FALSE,则
循环继续。
条件
label
要退出的循
环的标签
必须是包含 EXIT 语句的循环语句
的标签
标识符

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1203
用法
EXIT 语句从迭代传输执行的控制,使封闭语句类型(FOR 、FOREACH 、
LOOP 或 WHILE)的最内层循环终止。如果未指定循环标签或 WHEN 添加,
则在当前 FOR 、FOREACH 、LOOP 或 WHILE 语句之后的第一个语句处恢复
执行。
从 FOREACH 语句 EXIT
如果 EXIT 语句将 FOREACH 语句作为其最内层的结束语句,则 FOREACH 关
键字必须跟在 EXIT 关键字之后。如果 FOREACH 语句没有以 EXIT FOREACH
语句结束,则 EXIT FOREACH 语句会无条件地终止 FOREACH 语句。
以下程序段包含 EXIT FOREACH 语句:
FOREACH cursor1 FOR
SELECT * INTO a FROM TABLE(b);
IF a = 4 THEN
DELETE FROM TABLE(b)
WHERE CURRENT OF cursor1;4
EXIT FOREACH;
END IF;
END FOREACH;
从 FOR 、LOOP 或 WHILE 循环 EXIT
如果 EXIT 语句在 FOREACH 语句外发出,则它返回一个错误,除非它是从作
为其最内层的 FOR 、FOR LOOP 、LOOP 、WHILE LOOP 或 WHILE 语句发
出。在不包含 LOOP 关键字的 FOR 或 WHILE 语句中,EXIT 关键字之后需要
相应的 FOR 或 WHILE 关键字。执行从发出 EXIT 语句的最内层循环之后的第
一个可执行语句处恢复。
当 EXIT 语句从 FOR LOOP 、LOOP 或 WHILE LOOP 语句发出时,不需要其
它关键字,带有或不带有循环标签,但如果 EXIT 关键字之后包含 FOR 、
LOOP 或 WHILE 关键字,则该关键字必须对应于从其发出 EXIT 语句的循环的
类型。
如果 EXIT 关键字后面跟着循环标签的标识符,并且没有指定 condition,那么在
指定了标签的 FOR 、FOR LOOP 、LOOP 、WHILE LOOP 或 WHILE 语句之

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1204
后的第一个可执行语句将继续执行,这使得 EXIT 语句能够从嵌套循环中退出
(如果标记了外层循环)。
如果 WHEN condition 后跟着 EXIT 或 EXIT label 规范,则 EXIT 不会生效直
到 condition 为真。如果条件为真,则如果没有指定标签,则在已标记循环之后
或最内循环之后继续执行。
如果数据库服务器没有找到指定循环或循环标签,则 EXIT 语句失败。如果从
FOR 、FOREACH 、LOOP 或 WHILE 语句外发出 EXIT ,它将产生错误。
以下示例使用 EXIT FOR 语句。在 FOR 循环中,当 j 变为 6 时, WHILE 循环
中的 IF 条件 i = 5 为真。FOR 循环停止执行,SPL 过程继续 FOR 循环之外的
下一个语句(在这种情况下,是 END PROCEDURE 语句)。在该示例中,当 j 等
于 6 时,该过程结束:
CREATE PROCEDURE ex_cont_ex()
DEFINE i,s,j, INT;
FOR j = 1 TO 20
IF j > 10 THEN
CONTINUE FOR;
END IF
LET i,s = j,0;
WHILE i > 0
LET i = i -1;
IF i = 5 THEN
EXIT FOR;
END IF
END WHILE
END FOR
END PROCEDURE;
以下程序片段显示了在标记的 WHILE LOOP 语句中的两个条件 EXIT 语句,它
们嵌套在另一个标记为 LOOP 的语句中:
<>
LOOP
LET x = x+1;
<>
WHILE ( i >10 ) LOOP
LET x = x+1;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1205
EXIT inner WHEN x = 2;
EXIT outer WHEN x > 3;
END LOOP inner;
LET x = x+1;
END LOOP outer;
当 x=2 条件为真时,EXIT inner 语句将控制传递给 inner 标签的循环后的
LET 语句。当 x>3 条件为真时,EXIT outer 语句终止 outer 循环的执行。
相关语句
<< Label >> 语句 、FOR 、FOREACH 、LOOP 、WHILE