以编程方式将CSV导入PostgreSQL

时间:2017-02-27 19:10:59

标签: postgresql csv

我有一个包含90列的csv,我需要将其作为表导入到我的pgsql数据库中(还有几个csv文件包含大量列,我想将此方法应用到)。我的目标是避免使用CREATE TABLE查询手动指定90个单独的列。

表中的列标题应与csv中的列标题相同,并且每个列都应作为数字数据类型导入,精度为2个小数点。

到目前为止,我遇到的唯一一个这样做的程序是pgfutter我已成功安装。但是,我连接的数据库是AWS上的远程数据库,并且不清楚在何处输入连接详细信息。此外,安装后,我在请求帮助信息时收到错误:

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

有人可以建议在pgfutter或其他方法中使用简单的数字列将csv文件自动导入PostgreSQL吗?

1 个答案:

答案 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