当我使用`sequel`从csv文件导入数据到postgresql时出错

时间:2016-02-19 06:34:57

标签: ruby postgresql sequel

我正在尝试将数据从csv文件导入postgresql,如下所示。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
    if touches.count == 1
    {
        initialTouchLocation = (touches.first?.locationInView(self).x)!
    }
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
{
    if touches.count == 1
    {
        let locationInView = touches.first?.locationInView(self)
        if !thresholdHit
        {
            //this is the threshold for x movement in order to trigger the panning...
            if abs(initialTouchLocation - locationInView!.x) > 1
            {
                thresholdHit = true
            }
        }
        else
        {
            if (self.frame.width != CGFloat(screenSize))
            {
                let panDelta = initialTouchLocation - locationInView!.x
            }
        }
    }
}

但我得到了这样的错误。

csv = CSV.open(path, { col_sep: ',', headers: :first_row })

MatchDB.db.copy_into(:property,
  data: csv,
  format: :csv
)

任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如您在Sequel’s tests中看到的那样,Database#copy_into方法需要一个字符串,其中列以逗号分隔,行以行分隔符\n分隔。

您正在尝试传递一个ruby内部CSV表示,这通常是一种数组数组。我不是红宝石CSV中的大师,但要用它制作一个正确的字符串,可以使用:

csv.map { |row| row.join ',' }.join "\n"

总结:

csv = CSV.open(path, { col_sep: ',', headers: :first_row })

MatchDB.db.copy_into(:property,
  data: csv.map { |row| row.join ',' }.join "\n",
  format: :csv
)