Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update postgres_to_redshift.gemspec #1

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion lib/postgres_to_redshift.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,16 @@ def self.target_uri
@target_uri ||= URI.parse(ENV['POSTGRES_TO_REDSHIFT_TARGET_URI'])
end


def self.source_connection
unless instance_variable_defined?(:"@source_connection")
@source_connection = PG::Connection.new(host: source_uri.host, port: source_uri.port, user: source_uri.user || ENV['USER'], password: source_uri.password, dbname: source_uri.path[1..-1])
@source_connection.exec("SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;")

# if set: have a statement timeout:
unless ENV['POSTGRES_TO_REDSHIFT_STATEMENT_TIMEOUT'].empty?
@source_connection.exec("set statement_timeout to #{ENV['POSTGRES_TO_REDSHIFT_STATEMENT_TIMEOUT']};")
end
end

@source_connection
Expand Down Expand Up @@ -81,13 +87,25 @@ def column_definitions(table)
end

def s3
@s3 ||= AWS::S3.new(access_key_id: ENV['S3_DATABASE_EXPORT_ID'], secret_access_key: ENV['S3_DATABASE_EXPORT_KEY'])
unless ENV['S3_DATABASE_AUTH_ROLE'].empty
@s3 ||= Aws::S3.new(access_key_id: ENV['S3_DATABASE_EXPORT_ID'], secret_access_key: ENV['S3_DATABASE_EXPORT_KEY'])
else
@s3 ||= Aws::S3.new()
end
end

def bucket
@bucket ||= s3.buckets[ENV['S3_DATABASE_EXPORT_BUCKET']]
end

def s3_auth_method
unless ENV['S3_DATABASE_AUTH_ROLE'].empty?
@authMethod ||= "'aws_iam_role=#{ENV['S3_DATABASE_AUTH_ROLE']}'"
else
@authMethod ||= "'aws_access_key_id=#{ENV['S3_DATABASE_EXPORT_ID']};aws_secret_access_key=#{ENV['S3_DATABASE_EXPORT_KEY']}'"
end
end

def copy_table(table)
tmpfile = Tempfile.new("psql2rs")
zip = Zlib::GzipWriter.new(tmpfile)
Expand All @@ -96,6 +114,8 @@ def copy_table(table)
bucket.objects.with_prefix("export/#{table.target_table_name}.psv.gz").delete_all
begin
puts "Downloading #{table}"
## TODO 1 :: Filter column names ...
## TODO 2 :: setup dist key's
copy_command = "COPY (SELECT #{table.columns_for_copy} FROM #{table.name}) TO STDOUT WITH DELIMITER '|'"

source_connection.copy_data(copy_command) do
Expand Down
2 changes: 1 addition & 1 deletion lib/postgres_to_redshift/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
class PostgresToRedshift
VERSION = "0.1.2"
VERSION = "0.1.3"
end
8 changes: 4 additions & 4 deletions postgres_to_redshift.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]

spec.add_development_dependency "bundler", "~> 1.6"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_dependency "pg", "~> 0.18.0"
spec.add_dependency "aws-sdk-v1", "~> 1.54"
spec.add_development_dependency "bundler", "~> 2.2"
spec.add_development_dependency "rake", "~> 13.0"
spec.add_runtime_dependency "pg", "~> 1.2"
spec.add_runtime_dependency "aws-sdk-s3", "~> 1.93"
end