Skip to content

Instantly share code, notes, and snippets.

@meatballhat
Last active April 8, 2017 13:26
Show Gist options
  • Save meatballhat/3aa93f9de2ecabc883e26293bbccc445 to your computer and use it in GitHub Desktop.
Save meatballhat/3aa93f9de2ecabc883e26293bbccc445 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
def main
if ARGV.length < 2
$stderr.puts "Usage: #{$PROGRAM_NAME} <query-tmpl> <max-id> " \
"[range-size] [range-begin] [sleep]"
exit 1
end
query_tmpl = File.read(ARGV.fetch(0))
max_id = Integer(ARGV.fetch(1))
range_size = Integer(ARGV.fetch(2, 10_000))
range_begin = Integer(ARGV.fetch(3, 0))
min_id = range_begin
sleeps = Float(ARGV.fetch(4, 1))
range_end = range_begin + range_size
loop do
if range_begin > max_id
$stderr.puts '-- ALL DONE'
break
end
range_end = max_id if range_end > max_id
print_query(query_tmpl, range_begin, range_end, min_id, max_id, sleeps)
range_begin += range_size
range_end = range_begin + range_size
end
end
def print_query(query_tmpl, range_begin, range_end, min_id, max_id, sleeps)
$stderr.puts <<~EOF
--
-- range_begin=#{range_begin} range_end=#{range_end}
--
EOF
$stdout.puts query_tmpl % {
range_begin: range_begin,
range_end: range_end - 1,
min_id: min_id,
max_id: max_id,
sleeps: sleeps,
pct_completed: (Float(range_end) / Float(max_id)) * 100.0
}
$stderr.puts
end
main if $PROGRAM_NAME == __FILE__
BEGIN;
INSERT INTO logs(
id, job_id, content,
removed_by, created_at, updated_at, aggregated_at, archived_at, purged_at,
removed_at, archiving, archive_verified
)
SELECT
id, job_id, NULL as content,
removed_by, created_at, updated_at, aggregated_at, archived_at, purged_at,
removed_at, false as archiving, true as archive_verified
FROM logs_recovery
WHERE id BETWEEN %{range_begin} AND %{range_end}
AND id NOT IN (
SELECT id FROM logs WHERE id BETWEEN %{range_begin} AND %{range_end}
);
COMMIT;
COPY (SELECT '%{pct_completed}%% complete; sleeping %{sleeps}s') TO STDOUT;
SELECT now(), pg_sleep(%{sleeps});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment