我想为用户提供在我的 Ruby on Rails 3.2 应用程序中上传文件的选项,并将数据放入数据库中。我想使用 COPY FROM
命令,因为它比插入 ruby 对象更快。
如果我这样做
User.connection.execute("COPY users (name, taxon_id, created_at, updated_at) FROM 'a.txt'")
我明白了
ActiveRecord::StatementInvalid: PG::Error: ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
但是,\copy
在数据库连接中也不起作用。如何使用 Heroku 上的 PostgreSQL 轻松地从 Rails 中的平面文件上传数据?你能获得 super 用户权限吗?
最佳答案
感谢@PhilipHallstrom 的链接,我像这样使用 COPY FROM STDIN
:
rc = User.connection.raw_connection
rc.exec("COPY users (name, taxon_id, updated_at, created_at) FROM STDIN")
begin
until rc.put_copy_data( data )
$stderr.puts " waiting for connection to be writable..."
sleep 0.1
end
rescue Errno => err
@errmsg = @errmsg + "%s while reading copy data: %s" % [ err.class.name, err.message ]
error = true
else
rc.put_copy_end
while res = rc.get_result
if (res.result_status != 1)
error = true
@errmsg = @errmsg + "Result of COPY is: %s" % [ res.res_status(res.result_status) ]
end
end
end
关于ruby-on-rails - 在带有 Postgresql 后端的 Heroku 上的 Rails 应用程序中使用 COPY FROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526489/