PostgreSQL データベースに一括読み込みを行いたいのですが、いくつかのファイルがあり、かなり大きいです。Using GNU Parallel With splitについてGNU Parallel
andを読んだところですがGNU SQL
、すばらしいようです。 を使用する例をGNU Parallel
教えGNU SQL
て\copy
くださいCOPY
。
質問する
716 次
2 に答える
1
代わりに使用pg_bulkload
します。それ以上のことをあなたのために行います。
于 2013-03-02T02:03:33.513 に答える
1
GNU parallel と pg_bulkload はどちらもクールですが、ほとんどのデフォルト インストールでは利用できません。このタスクは、複数の \COPY 操作を同時に呼び出すシェル スクリプトで '&' (バックグラウンド サブシェル) と 'wait' を使用することで達成できると思います。次に例を示します。
#!/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"
于 2016-08-26T03:43:23.757 に答える