2012-02-08 17 views
1

我使用的是COPY ... FROM ... WITH CSV...语法,但是我发现文件名可以很容易地从数据库中其他地方存储的值中派生出来,并且在脚本中随时更改它是维护的噩梦。从选择查询派生的源复制?

是否有可能SELECT文件名,即:

COPY ... FROM (SELECT filename FROM mytable WHERE x=1) WITH CSV...

谢谢,页。

回答

1

不,你不能使用子查询来获取文件名。

但是,您可以在存储过程中使用动态SQL。从版本9.0开始,您可以使用DO:

DO 
$$ 
DECLARE 
    _file TEXT; 
BEGIN 
    SELECT filename INTO _file FROM mytable WHERE x=1; 

    EXECUTE 'COPY ... FROM ' || _file || ' WITH CSV...;'; 

    RAISE INFO 'File % imported', _file; 
END; 
$$;