PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails-Rohabfrage für das CSV-Format, die über den Controller zurückgegeben werden soll

AFAIK müssen Sie den copy_data verwenden Methode auf der zugrunde liegenden PostgreSQL-Datenbankverbindung dafür:

Und es gibt sogar ein Beispiel:

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

Der Wrapper von ActiveRecord für die Rohdatenbankverbindung weiß nicht, was copy_data ist ist, aber Sie können raw_connection zum Auspacken:

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

Das würde Ihnen ein Array von CSV-Strings in csv hinterlassen (eine CSV-Zeile pro Array-Eintrag) und Sie könnten csv.join("\r\n") um die endgültigen CSV-Daten zu erhalten.