Class: PgCopy::CopyFromCSV

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_copy/copy_from_csv.rb

Constant Summary collapse

SQL =
'COPY %<table>s (%<columns>s) FROM STDIN WITH CSV'.freeze
DEFAULTS =
{
  header: false
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(conn, file, table, columns, options = {}) ⇒ CopyFromCSV

Returns a new instance of CopyFromCSV.



11
12
13
14
15
16
17
# File 'lib/pg_copy/copy_from_csv.rb', line 11

def initialize(conn, file, table, columns, options = {})
  @conn = conn
  @file = file
  @table = table
  @columns = columns
  @options = DEFAULTS.merge(options)
end

Instance Method Details

#copyObject



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/pg_copy/copy_from_csv.rb', line 19

def copy
  sql = format(SQL, table: @conn.escape_identifier(@table),
                    columns: @columns.join(','))

  csv = CSV.foreach(@file).lazy
  csv = csv.drop(1) if skip_header?

  @conn.copy_data(sql) do
    csv.each do |row|
      @conn.put_copy_data(row.to_csv)
    end
  end
end