web-dev-qa-db-ja.com

CSVからPostgreSQLテーブルを自動的に作成してデータを設定する方法は?

私はデータベース管理の初心者で、PostgreSQLを使用しています。私がしなければならないのは、CSVファイル(約200のテーブルに対応)をデータベースに移行することだけです。 CSVファイルごとに手動でテーブルを作成するのは少し面倒なので、私を助けてください。データをインポートするだけでなく、CSVファイルからテーブルを生成する方法はありますか?

3
saniojoseph

あなたはあなたを助けるために PgFutter を見るかもしれません。ヘッダー行に基づいてCSV形式のデータのテーブルを作成し、データをテーブルにロードするため、ユースケースにうまく適合しているように思えます。

5
Kassandry

最後に、CSVからテーブルにデータを取り込むことができるスクリプトを作成しました。

これだよ:

DATADIR='data'                      # this directory name


PREFIX='jobd'
DBNAME='divacsv'

function createSchema {
    COLUMNS=`head -n 1 $1 | 
        awk -F, '{for(i=1; i<=NF; i++){out=out $i" text, ";} print out;}' | 
        sed 's/ text, $/MYEXTRA text/' | 
        sed 's/"//g'`
    CMD_CREATE="psql $DBNAME -c \"CREATE TABLE $2 ($COLUMNS);\""

    echo $CMD_CREATE
    sh -c "$CMD_CREATE"

    CMD_COPY="psql divacsv  -c \"COPY $2 FROM '"`pwd`"/$1' DELIMITER ',' CSV;\""
    echo $CMD_COPY
    sh -c "$CMD_COPY"
}

for file in $DATADIR/*.csv; do
    table=$PREFIX"_"`echo $file | sed 's/.*\///' | sed 's/.csv//' `
    createSchema "$file" $table
done
1
saniojoseph