临时表的存储位置

通过 CREATE TEMP TABLE 语句指定的分布方案(可以使用 IN 子句或 FRAGMENT BY 子句)优先于 DBSPACETEMP 环境变量或 DBSPACETEMP 配置参数指定的信息。

对于您没有指定显式分布方案的临时表,它的存储位置取决于 DBSPACETEMP 环境变量(或 DBSPACETEMP 配置参数)的设置。

例如,如果您在日志记录的数据库中创建了三个临时表,DBSPACETEMP 指定 tempspc1tempspc2tempspc3 作为该临时表的缺省 dbspace ,第一个在名为 tempspc1 的dbspace 中,第二个在 tempspc2 中,第三个在 tempspc3 中(如果这些是临时存储的唯一请求)。

使用 SELECT INTO TEMP 和 WITH NO LOG 创建的临时分片将 DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量列出的 dbspace 之间传播。因此,指定多个 dbspace 的 DBSPACETEMP (或者 DBSPACETEMP)设置可生成跨临时 dbspace 中所有 dbspace 循环分片。

如您创建了临时表并指定 WITH NO LOG ,则临时表上的操作将不会包含在事务日志记录中。如果 DBSPACETEMP 列表中有一个日志记录的空间,则使用 SELECT .. INTO TEMP WITH NO LOG 选项创建的临时表将在非日志记录的临时 dbspace 中通过循环分布方案分片。例如,如果来自 10 个 dbspace 的列表,只有一个 dbspace 是日志记录,则该表在其它 9 个非日志记录的临时 dbspace 中按照循环分布方案分片。

以下示例显示如果将数据插入到名为 result_tmp 的临时表中,并将用户定义的能返回多行的函数(f_one)的结构输出到文件中:
CREATE TEMP TABLE result_tmp( ... );
        INSERT INTO result_tmp EXECUTE FUNCTION f_one();
        UNLOAD TO 'file' SELECT * FROM result_tmp;