Sha256: 9d8352d3f4519dde243b31d15229dd6165c5abef3867414d3b8ec4ecc1fd508d
Contents?: true
Size: 1.77 KB
Versions: 1
Compression:
Stored size: 1.77 KB
Contents
# frozen_string_literal: true require_relative '../../protocol' def bash(env, cmd) code = remove_common_indent( %(set -e set -o pipefail #{cmd} ) ) # puts code env.send :sh, 'bash ' + create_tmp(code) end # postgresql protocol using psql, requires HOST, PORT, USER, DB class Psql # Sometimes we want to use the psql command with bash directly def sh_cmd(schema) c = @conn env_vars = "PGOPTIONS='-c search_path=#{schema.empty? ? '' : schema + ','}public' " "PGPASSWORD=#{c.password} #{env_vars} psql -h #{c.host} -p #{c.port} -U #{c.user} -d #{c.db} -v ON_ERROR_STOP=1" end # 1. do not add required argument here, so psql.config will work or we can only use psql(conn: xxx).config def initialize(conn: nil, create: 'mview', params: {}) @create = create @params = params @conn = conn end def build(code, _) # 2. lazily check the argument only when used raise 'argument conn required' if @conn.nil? if @create.to_s == 'table' 'DROP TABLE IF EXISTS :_schema_:_name_;' \ 'CREATE TABLE :schema:_name_ AS (' + code + ');' elsif @create.to_s == 'mview' 'DROP MATERIALIZED VIEW IF EXISTS :_schema_:_name_;' \ 'CREATE MATERIALIZED VIEW :schema:_name_ AS (' + code + ');' else code end end def run_script(env, fname, task) param_str = (@params || {}).map { |k, v| "-v #{k}=\"#{v}\"" }.join(' ') schema = task.rule_scopes.join('__') out_schema = (task.rule_scopes + (task.target_scope.nil? ? [] : [task.target_scope])).join('__') bash env, %( #{sh_cmd(schema)} #{param_str} -v _name_=#{task.output_stem} \ -v _schema_=#{out_schema.empty? ? '' : out_schema + '.'} -f #{fname} | tee #{fname}.log mv #{fname}.log #{task.name} ) end end creator :psql, Psql
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
raka-0.3.16 | lib/raka/lang/psql/impl.rb |