2017-02-27 95 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 
相关问题