PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête brute Rails pour le format csv, à renvoyer via le contrôleur

AFAIK vous devez utiliser le copy_data méthode sur la connexion à la base de données PostgreSQL sous-jacente pour cela :

Et il y a même un exemple :

conn.copy_data "COPY my_table TO STDOUT CSV" do
  while row=conn.get_copy_data
    p row
  end
end

Le wrapper d'ActiveRecord pour la connexion à la base de données brute ne sait pas ce que copy_data est mais vous pouvez utiliser raw_connection pour le déballer :

conn = ActiveRecord::Base.connection.raw_connection
csv  = [ ]
conn.copy_data('copy stories to stdout with csv header') do
  while row = conn.get_copy_data
    csv.push(row)
  end
end

Cela vous laisserait avec un tableau de chaînes CSV dans csv (une ligne CSV par entrée de tableau) et vous pouvez csv.join("\r\n") pour obtenir les données CSV finales.