Class: Psql
- Inherits:
-
Object
- Object
- Psql
- Defined in:
- lib/raka/lang/psql/impl.rb
Overview
postgresql protocol using psql, requires HOST, PORT, USER, DB
Instance Method Summary collapse
- #build(code, _) ⇒ Object
-
#initialize(conn: nil, create: 'mview', params: {}) ⇒ Psql
constructor
1.
- #run_script(env, fname, task) ⇒ Object
-
#sh_cmd(scope) ⇒ Object
Sometimes we want to use the psql command with bash directly.
Constructor Details
#initialize(conn: nil, create: 'mview', params: {}) ⇒ Psql
-
do not add required argument here, so psql.config will work or we can only use psql(conn: xxx).config
27 28 29 30 31 |
# File 'lib/raka/lang/psql/impl.rb', line 27 def initialize(conn: nil, create: 'mview', params: {}) @create = create @params = params @conn = conn end |
Instance Method Details
#build(code, _) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/raka/lang/psql/impl.rb', line 33 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 :_name_;' \ 'CREATE TABLE :_name_ AS (' + code + ');' elsif @create.to_s == 'mview' 'DROP MATERIALIZED VIEW IF EXISTS :_name_;' \ 'CREATE MATERIALIZED VIEW :_name_ AS (' + code + ');' else code end end |
#run_script(env, fname, task) ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/raka/lang/psql/impl.rb', line 48 def run_script(env, fname, task) param_str = (@params || {}).map { |k, v| "-v #{k}=\"#{v}\"" }.join(' ') bash env, %( #{sh_cmd(task.scope)} #{param_str} -v _name_=#{task.stem} \ -f #{fname} | tee #{fname}.log mv #{fname}.log #{task.name} ) end |
#sh_cmd(scope) ⇒ Object
Sometimes we want to use the psql command with bash directly
20 21 22 23 24 |
# File 'lib/raka/lang/psql/impl.rb', line 20 def sh_cmd(scope) c = @conn env_vars = "PGOPTIONS='-c search_path=#{scope ? scope + ',' : ''}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 |