我想對PostgreSQL數據庫執行批量加載,有幾個文件,而且相當大。我剛剛讀了Using GNU Parallel With split關於GNU Parallel
和GNU SQL
,它看起來太棒了,有人可以幫我一個例子使用GNU Parallel
,GNU SQL
和\copy
或COPY
爲PostgreSQL做批量加載嗎?如何在PostgreSQL中使用GNU並行和GNU SQL 在PostgreSQL中拷貝
2
A
回答
1
我只是用pg_bulkload
代替。它爲你做到了,而且更多。
1
GNU parallel和pg_bulkload都很酷,但在大多數默認安裝中都不可用。我認爲這個任務可以通過在shell腳本中使用'&'(後臺子shell)和'wait'來實現,該腳本同時調用多個\ COPY操作。這裏有一個例子:
#!/bin/bash
PG_USER_NAME=bizusr
PG_DB_NAME=bizdb
BCP_DIR=/data/biz/bcp/input
do_bcp()
{
TABLE_NAME=$1
echo "`date` $$ copy $TABLE_NAME begin"
psql -q -U $PG_USER_NAME -d $PG_DB_NAME << EOF
-- SET DATESTYLE TO 'ISO,YMD'; -- you may need this when dealing with timestamps
\COPY $TABLE_NAME FROM '${BCP_DIR}/${TABLE_NAME}.bcp' WITH (FORMAT CSV, DELIMITER '|');
EOF
echo "`date` $$ copy $TABLE_NAME done"
}
echo "`date` $$ parallel copy started"
for BCP_FILE in `ls ${BCP_DIR}/*.bcp`; do
TABLE_NAME=`echo $BCP_FILE|awk -F"/" '{print $NF}'|sed -e s/\.bcp$//`
do_bcp $TABLE_NAME &
done
wait
echo "`date` $$ parallel copy finished"
相關問題
- 1. 如何在使用GNU並行的shell中並行for循環
- 2. 如何在c#中使用gnu命令#
- 3. 如何在VB6中使用GNU gettext?
- 4. GNU並行和Solaris 11
- 5. XARGS,GREP和GNU並行
- 6. postgresql拷貝與模式支持
- 7. 在GNU Parallel中執行SCP
- 8. GNU並行數組?
- 9. GNU並行與rsync
- 10. GNU並行處理
- 11. GNU sed在Windows和行結束符中
- 12. 使用GNU並行進行分頁
- 13. GNU並行:如何在使用「--nonall」時設置工作目錄?
- 14. 如何在Genie中調用GNU ReadLine
- 15. 如何在GNU Emacs中停用vc-git?
- 16. 使用GNU Emacs在自動填充模式中合併行24.1
- 17. 如何在gnu並行中分配變量?
- 18. 淺拷貝和深拷貝在C
- 19. 如何使用Linux終端在PostgreSQL中運行SQL文件?
- 20. 如何使用postgresql數據庫在Pentaho中執行sql腳本?
- 21. Python管道使用GNU並行
- 22. 如何在GNU make中使用命令行參數?
- 23. GNU並行:如何將shell腳本
- 24. ssh使用GNU並行的隧道
- 25. GNU並行使用兩個參數
- 26. 如何使用GnuPG和GNU並行進行大文件並行加密?
- 27. 在shell腳本中使用GNU並行執行多個mysql腳本並行
- 28. 何時使用=和:=在postgreSQL中?
- 29. 如何在BaseClass拷貝構造函數中拷貝SubClass對象
- 30. 如何在Laravel Homestead中使用postgreSQL
謝謝您的回答,但是,我知道,'pg_bulkload'做到這一點,但我要求的'GNU Parallel' +'GNU Sql' +'PostgreSQL中copy'爲例... – nanounanue 2013-03-05 01:27:46
@nanounanue啊,好的;很多詢問批量加載問題的人都不知道它,並傾向於指定其他候選工具。因爲你沒有提到看過替代品,所以你的問題並不清楚,這不是這種情況。對於那個很抱歉。 – 2013-03-05 01:58:55