我正在使用活动记录来获取我的故事,然后生成CSV,这是在rails cast中完成的标准方式.但我有很多行,需要几分钟.我想如果我能让posgresql做csv渲染,那么我可以节省一些时间.
这是我现在所拥有的:
query = "COPY stories TO STDOUT WITH CSV HEADER;"
results = ActiveRecord::Base.connection.execute(query);
Run Code Online (Sandbox Code Playgroud)
但是此查询的结果为空:
=> #<PG::Result:0x00000006ea0488 @connection=#<PG::Connection:0x00000006c62fb8 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
2.0.0-p247 :053 > result.count
=> 0
Run Code Online (Sandbox Code Playgroud)
更好的了解方式:
2.0.0-p247 :059 > result.to_json
=> "[]"
Run Code Online (Sandbox Code Playgroud)
我怀疑我的控制器看起来像这样:
format.csv { send_data raw_results }
Run Code Online (Sandbox Code Playgroud)
这适用于普通查询,我只是无法弄清楚将CSV结果返回到rails的SQL语法.
UPDATE
CSV输出从120000毫秒下降到290毫秒
我的模特:
def self.to_csv(story_ids)
csv = []
conn = ActiveRecord::Base.connection.raw_connection
conn.copy_data("COPY (SELECT * FROM stories WHERE stories.id IN (#{story_ids.join(',')})) TO STDOUT WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, ESCAPE E'\\\\');") do
while row = conn.get_copy_data
csv.push(row)
end …Run Code Online (Sandbox Code Playgroud) rvm通过以下方式正确安装:sudo apt-get install ruby-rvm
当我尝试安装ruby 1.9.3时出现这些错误?
anthony@SnakeDoc:~$ rvm install 1.9.3
mkdir: cannot create directory `/usr/share/ruby-rvm/gems/ruby-1.9.3-p0': Permission denied
Installing Ruby from source to: /usr/share/ruby-rvm/rubies/ruby-1.9.3-p0, this may take a while depending on your cpu(s)...
ruby-1.9.3-p0 - #fetching
ruby-1.9.3-p0 - #extracting ruby-1.9.3-p0 to /usr/share/ruby-rvm/src/ruby-1.9.3-p0
/usr/share/ruby-rvm/scripts/functions/utility: line 142: /usr/share/ruby-rvm/log/ruby- 1.9.3-p0/extract.log: Permission denied
/usr/share/ruby-rvm/scripts/functions/utility: line 148: /usr/share/ruby-rvm/log/ruby- 1.9.3-p0/extract.log: Permission denied
ERROR: Error running 'bunzip2 < '/usr/share/ruby-rvm/archives/ruby-1.9.3-p0.tar.bz2' | tar xf - -C /usr/share/ruby-rvm/tmp/rvm_src_23435', please read /usr/share/ruby- rvm/log/ruby-1.9.3-p0/extract.log
ERROR: There has been an error while trying to …Run Code Online (Sandbox Code Playgroud) 有时,我想在git commit消息中召集人们。而且它还会让人们知道他们应该查看提交。
示例:“修复+ JoeSchmoe引起的问题”
我已经尝试了好一阵子了,并决定我不会很快解决这个问题!我在这里先向您的帮助表示感谢。爱这个地方。
我有2张桌子
日期:
date_id, user_id, cost, title, description
Run Code Online (Sandbox Code Playgroud)
date_rating:
date_id, user_id, rating
Run Code Online (Sandbox Code Playgroud)
我有多个条目相同date_id但不同user_id。换句话说,同一日期的多个评分。评级为1或-1。我想将所有评分加在一起,date_id然后将其添加到匹配的DATE表date_id中。这样我在表上有一列称为rating的列DATE。这样,我可以按评分排序。听起来很简单,但事实证明并非如此。我猜DBA不是我的事!
编辑:MySQL客户端版本:mysqlnd 5.0.8-dev-20102224-$修订:310735 $