Gastón Ramos

Blog personal

← Volver al blog

Como usar COPY from con ruby y PG driver

Recuperado del archivo original de WordPress.

Estoy trabajando en un proyecto dónde necesito importar unos archivos csv muy grandes, apróximadamenteunos 40 millones de registros cada uno, luego de varias pruebas con ruby, decidí usar COPY from, sencillamente por que el script de ruby demorarba unas 15hs mientras que el copy from 20 minutos, pasé por varios errores intentando correr el COPY from con Sequel uno de los errores decía que para correr COPY from file debo ser super usuario, y que podía usarCOPY from STDIN como usuario normal (error de PG) así que la forma que encontré de correr el copy from STDIN es usando directamente el driver de PG así:

class CopyCsvImporter

def initialize(csv_file, args) @csv_file = csv_file @separator = args[:separator] @delete_table = args[:delete_table] @fields = args[:fields] @table = args[:table] end

def copy_cmd "COPY #{@table} (#{@fields}) FROM STDIN DELIMITER '|'" end

def conn conn_args = {:dbname => App.db_conf['database'], :user => App.db_conf['username'], :password => App.db_conf['password'], :host => App.db_conf['host']}

@conn ||= PG.connect conn_args end

def import! conn.exec copy_cmd File.open(@csv_file) do|f| f.each_line{|line| conn.put_copy_data(line)} end conn.put_copy_end end

end

Preste atención sobre todo al método import. Esto fué todo!

También puede interesarte

Los comentarios históricos se conservan como archivo. Para conversar hoy, podés escribirme.