最終更新日: 2011年5月15日
・[WindowsとLinuxで同じRakefileを使用する] へ戻る
# # For PostgreSQL # namespace :psql do task :default => [:create, :migrate, :drop] ENV_PGPASSWORD = "PGPASSWORD" ENV[ENV_PGPASSWORD ] = PASSWORD def get_psql_password() pass = ENV[ENV_PGPASSWORD] if !pass || pass.empty? then system "stty -echo" puts "input database password" pass = STDIN.gets system "stty echo" ENV[ENV_PGPASSWORD] = pass.chop end end def get_psql_dbname() if DBNAME && DBNAME.length > 0 then return DBNAME elsif ENV.include?('dbname') then return ENV['dbname'] else puts "input database name" dbname = STDIN.gets ENV['dbname'] = dbname.chop return ENV['dbname'] end end desc "create database" task :create do dbname = get_psql_dbname() get_psql_password() sh "#{PGPATH}createdb -U #{PGUSER} #{dbname}" end desc "drop database" task :drop do dbname = get_psql_dbname() get_psql_password() sh "#{PGPATH}dropdb -U #{PGUSER} #{dbname}" end desc "migrate database" task :migrate do dbname = get_psql_dbname() get_psql_password() sh "#{PGPATH}psql -U #{PGUSER} -d #{dbname} < #{MIGRATE_DDL}" end def psql_exec(q) dbname = get_psql_dbname() get_psql_password() sh "#{PGPATH}psql -U #{PGUSER} -d #{dbname} -c \"#{q}\"" end desc "execute query (psql:exec[\"QUERY\"])" task :exec, "query" do |x, args| psql_exec(args.query) end desc "show databases" task :databases do sh "#{PGPATH}psql -U #{PGUSER} -c \"\\l\"" end desc "show tables (\\d)" task :tables do psql_exec("\\d") end desc "describe table (psql:desc[TABLENAME])" task :desc, "table_name" do |x, args| psql_exec("\\d #{args.table_name}") end end