使用Postgresql后端在Heroku上的Rails应用程序中使用COPY FROM
我想让用户选择在我的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中的平面文件上传数据? 你能获得超级用户权限吗?
感谢@ 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
你可以使用gem https://github.com/diogob/postgres-copy假设data
是一个IO对象。
User.copy_from data, columns: [:name, :taxon_id, :updated_at, :created_at]
或直接使用上传文件的路径:
User.copy_from "/tmp/uploaded_file.csv", columns: [:name, :taxon_id, :updated_at, :created_at]
- 在Heroku上每分钟安排一个工作Rails 3.1
- 如何从SQLite3切换到Postgres以在Heroku上部署
- Heroku在部署时不会预编译资产
- 是否可以使用Ruby 1.9.3在Heroku上运行我的Rails应用程序? 如果是这样,怎么样?
- `undefined方法`find_asset’代表nil:NilClass`
- Heroku App Crash H10 – bash:bin / rails:没有这样的文件或目录
- Heroku:如果你在heroku中有多个应用程序,你如何推送到特定的应用程序?
- Rails 3命令将我的CSS样式表的文本嵌入到HTML的头部
- ! 主 – >主(预接收挂钩拒绝)