我想对 PostgreSQL 数据库进行批量加载,有几个文件而且非常大。我刚刚在Using GNU Parallel With split中阅读了关于GNU Parallel
and的内容GNU SQL
,它看起来很棒,有人可以帮我举一个使用GNU Parallel
, GNU SQL
and\copy
或COPY
对 PostgreSQL 进行批量加载的例子吗?
问问题
716 次
2 回答
1
I'd just use pg_bulkload
instead. It does that, and more, for you.
于 2013-03-02T02:03:33.513 回答
1
GNU parallel 和 pg_bulkload 都很酷,但在大多数默认安装中不可用。我认为这个任务可以通过在 shell 脚本中使用“&”(后台子 shell)和“等待”来实现,它同时调用多个 \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"
于 2016-08-26T03:43:23.757 回答