【问题标题】:How to generate table from csv in postgres sql如何在 postgresql 中从 csv 生成表
【发布时间】:2015-09-01 08:54:14
【问题描述】:

我是数据库管理的新手,我们正在使用 psql。我需要做的就是将 csv(大约 200 个表)迁移到我们的数据库中。为每个 csv 文件手动创建表格有点累,所以请帮帮我,有没有办法从 csv 文件生成表格?

【问题讨论】:

  • 您可以使用COPY 来完成这项工作,请参阅this
  • This 是你需要做的
  • 谢谢,这个复制命令会从 csv 文件中填充表格吗???
  • 您将不得不编写一个脚本来读取 csv 文件并写出创建表语句。
  • 如果有人能帮我找到一个能自动从 csv 填充表格的脚本,我将不胜感激。它只是后端的新手,拜托

标签: database postgresql import-from-csv postgresql-copy


【解决方案1】:

由 OP 回复 at DBA Stackexchange。我在这里复制答案,因为这是我的搜索引擎返回的第一个链接。

OP 编写了如下脚本:

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

评论建议可能需要HEADER 以避免在第一行加载标题文本,这是真的。

我已经测试过这段代码,但无法在 CentOS 下运行。

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多