Come usare GNU parallel e GNU SQL con \ copy in PostgreSQL

parallel-processing postgresql sqlbulkcopy

Domanda

Voglio eseguire un caricamento di massa su un database PostgreSQL, ci sono diversi file e sono piuttosto grandi. Ho appena letto in Uso di GNU Parallel Con split su GNU Parallel e GNU SQL , e sembra fantastico, Qualcuno potrebbe aiutarmi con un esempio di GNU Parallel , GNU SQL e \copy o COPY per fare un carico di massa su PostgreSQL?

Risposta popolare

Sia GNU parallel che pg_bulkload sono fantastici, ma non disponibili nella maggior parte delle installazioni predefinite. Penso che questo compito possa essere raggiunto usando "&" (sottoscheda di sfondo) e "aspetta" in uno script di shell, che richiama contemporaneamente più operazioni \ COPY. Ecco un esempio:

#!/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"


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché