2014-12-19 21 views
0

OFFSET我在做什麼,現在
我有1000行的數據庫表
限制,偏移和somefile是變量
我迭代,並在每次迭代我做的:替代與LIMIT反覆複製和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在一個SQL命令中沒有迭代的情況下有沒有csv文件?

回答

0

In 9.3 and above, you can COPY ... TO PROGRAM ...。該程序可以是一個腳本,用於過濾輸入並即時更改輸出文件。一個簡單的工具,如awk適用於此。只有在只使用輸入數據的情況下才能獲得文件名的知識,而不訪問數據庫的其他部分,它纔會有效。

這是不幸的是沒有可能從遊標複製,因爲這將是一個很好的解決你的問題,讓你運行多個不同的目的地COPY的命令,而無需使用LIMITOFFSET。不幸的是,FETCH命令在COPY查詢塊中不合法。您可以使用從光標中提取的PL/PgSQL函數解決此問題,並返回結果,但這很快就變得麻煩。

+0

是的,我希望用CURSOR來完成這個... – sakal 2014-12-19 13:25:53

+0

與那個腳本...我必須實現一個迭代? – sakal 2014-12-20 05:14:13

+0

@sakal我不知道你在問什麼。如果你想迭代,你可以使用'EXECUTE format(...)'執行'COPY'的PL/PgSQL函數。您也可以使用PL/PgSQL從遊標中'FETCH'並返回行。 – 2014-12-20 07:57:03