2014-12-19 4 views
0

то, что я делаю сейчас
У меня есть таблица базы данных, с 1000 строк
предела, смещение и некая-файл переменные
я перебор и в каждой итерации я сделать:альтернатива для итерационного COPY с LIMIT и OFFSET в PostGreSQL

Пересчитать смещения путем добавления старого значения к нему
и скопировать несколько строк в файл CSV

COPY (SELECT somevalue1, somevalue2, avg(somevalue3) as avg FROM table 
GROUP BY somevalue1 ORDER BY somevalue2 LIMIT Limit OFFSET Offset) TO \’ 
SOMEFILE \’ DELIMITER AS \’ \’ CSV HEADER 

есть способ скопировать строки в DIF Есть ли файлы csv без итерации в одной команде SQL?

ответ

0

In 9.3 and above, you can COPY ... TO PROGRAM .... Программа может быть скриптом, который фильтрует вход и изменяет выходной файл на лету. Для этого подходит простой инструмент, такой как awk. Это будет работать, только если знание имени файла может быть получено с использованием только входных данных без доступа к другим частям базы данных.

Это, к сожалению, не представляется возможным COPY от курсора, так как это было бы хорошим решением вашей проблемы, что позволяет запускать несколько COPY команд с разных направлений без использования LIMIT и OFFSET. К сожалению, команда FETCH не является законной в блоке запроса COPY. Вы можете обойти это с помощью функции PL/PgSQL, которая извлекается из курсора и возвращает результаты, но это быстро становится громоздким.

+0

Да, я надеялся сделать это с помощью CURSOR .... – sakal

+0

с этим скриптом ... я должен был бы реализовать итерацию? – sakal

+0

@sakal Я понятия не имею, что вы просите. Вы можете использовать функцию PL/PgSQL, которая 'EXECUTE format (...)' выполняет 'COPY', если вы хотите итерации. Вы также можете использовать PL/PgSQL для «FETCH» из курсора и возвращать строки. –

Смежные вопросы