2017-02-27 32 views
0

我有一個csv,包含90列,我需要將它作爲表格導入到我的pgsql數據庫(並且還有幾個更多的csv文件,我希望將此方法應用於大量列) 。我的目標是避免用CREATE TABLE查詢手動指定90個單獨的列。以編程方式將CSV導入到PostgreSQL

表中的列標題應與csv中的列標題保持一致,並且每個列都應導入爲精度爲2個小數點的數字數據類型。

到目前爲止,我遇到的唯一一個程序是pgfutter,我已經成功安裝了。但是,我連接的數據庫是AWS上的遠程數據庫,不清楚在哪裏輸入連接詳細信息。

$ ./pgfutter --help 
-bash: ./pgfutter: Permission denied 

任何人都可以表明,在pgfutter解決方法或導入與簡單的數字列csv文件自動PostgreSQL的另一種方法:另外,在安裝後,我請求幫助信息時,得到一個錯誤?

+0

我會檢查'pgfutter'的權限,確保它的可執行文件。這聽起來像是你的阻擋者。像'ls -l pgfutter'這樣的東西應該會顯示你的權限(在左邊)。 'chmod'命令可用於更改權限(請參閱man chmod')。 – jmelesky

+0

「*我有一個帶有90列的csv,我需要將它作爲表格導入到我的pgsql數據庫*」90列SQL表是設計非常糟糕的表,並且將是一個惡夢。您應該做一些工作來將CSV數據轉化爲更明智的內容。也許會問這個問題。 – Schwern

+0

它爲什麼會自動設計糟糕的桌子,而不是簡單地包含許多不同變量的桌子? –

回答

0

編寫一個shell腳本很簡單,該腳本從CSV文件的第一行構造CREATE TABLE語句。

這裏是我的解決方案:

#!/bin/bash 

# makes a CREATE TABLE statement out of the first line of a CSV file 

# usage: mktab <tabname> <CSV file> 

if [ -z "$2" -o -n "$3" ]; then 
    echo "usage: mktab <tabname> <CSV file>" 1>&2 
    exit 1 
fi 

IFS=, 
first=1 

echo -n "CREATE TABLE \"$1\" (" 
for col in $(head -1 "$2"); do 
    if [ $first -eq 1 ]; then 
     first=0 
    else 
     echo -n ', ' 
    fi 
    echo -n "\"$col\" numeric(10,2)" 
done 
echo ');' 

exit 0 
相關問題