2012-02-08 5 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; 
$$; 
Смежные вопросы