【发布时间】:2012-02-08 00:47:13
【问题描述】:
我正在使用COPY ... FROM ... WITH CSV... 语法,但是我发现文件名可以很容易地从存储在数据库中其他位置的值导出,并且一直在脚本中更改它是维护的噩梦。
是否可以SELECT文件名即:
COPY ... FROM (SELECT filename FROM mytable WHERE x=1) WITH CSV...
谢谢,p.
【问题讨论】:
标签: postgresql
我正在使用COPY ... FROM ... WITH CSV... 语法,但是我发现文件名可以很容易地从存储在数据库中其他位置的值导出,并且一直在脚本中更改它是维护的噩梦。
是否可以SELECT文件名即:
COPY ... FROM (SELECT filename FROM mytable WHERE x=1) WITH CSV...
谢谢,p.
【问题讨论】:
标签: postgresql
不,你不能,你不能使用子查询来获取文件名。
但是,您可以在存储过程中使用动态 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;
$$;
【讨论】: