Sha256: 27093d0ac3497880a5e02303e75b91b324c01d1c5fa5d0987b3184bf0a055054

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

require_relative './queryable'

module CsvFastImporter
  module Database
    class Postgres < Queryable
      identifier_quote_character '"'

      def verify_compatibility(configuration)
        #TODO verify postgresql version
      end

      def bulk_import(file, table, columns, row_index_column: nil, column_separator:, encoding:)
        sql_columns = columns
        sql_columns = [row_index_column] + sql_columns unless row_index_column.nil?
        columns_list_query = sql_columns.map { |column| identify(column) }
                                        .join(',')

        row_index = 0
        connection.copy_data <<-SQL do
          COPY #{identify(table)} (#{columns_list_query})
          FROM STDIN
          DELIMITER '#{column_separator}'
          CSV
          ENCODING '#{encoding}';
        SQL
          while line = file.gets do
            row_index += 1
            line.prepend row_index.to_s << column_separator unless row_index_column.nil?
            connection.put_copy_data line
          end
        end
        row_index
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
csv_fast_importer-1.2.0 lib/csv_fast_importer/database/postgres.rb
csv_fast_importer-1.1.0 lib/csv_fast_importer/database/postgres.rb
csv_fast_importer-1.0.0 lib/csv_fast_importer/database/postgres.rb