1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
# -*- ruby -*-
require 'pg'
require 'stringio'
# Using COPY asynchronously
$stderr.puts "Opening database connection ..."
conn = PG.connect( :dbname => 'test' )
conn.setnonblocking( true )
socket = conn.socket_io
$stderr.puts "Running COPY command ..."
buf = ''
conn.transaction do
conn.send_query( "COPY logs TO STDOUT WITH csv" )
buf = nil
# #get_copy_data returns a row if there's a whole one to return, false
# if there isn't one but the COPY is still running, or nil when it's
# finished.
begin
$stderr.puts "COPY loop"
conn.consume_input
while conn.is_busy
$stderr.puts " ready loop"
select( [socket], nil, nil, 5.0 ) or
raise "Timeout (5s) waiting for query response."
conn.consume_input
end
buf = conn.get_copy_data
$stdout.puts( buf ) if buf
end until buf.nil?
end
conn.finish
|