class ActiveRecord::Tasks::PostgreSQLDatabaseTasks
:nodoc:
:nodoc:
def charset
def charset connection.encoding end
def collation
def collation connection.collation end
def configuration
def configuration @configuration end
def create(master_established = false)
def create(master_established = false) establish_master_connection unless master_established connection.create_database configuration['database'], configuration.merge('encoding' => encoding) establish_connection configuration rescue ActiveRecord::StatementInvalid => error if /database .* already exists/ === error.message raise DatabaseAlreadyExists else raise end end
def drop
def drop establish_master_connection connection.drop_database configuration['database'] end
def encoding
def encoding configuration['encoding'] || DEFAULT_ENCODING end
def establish_master_connection
def establish_master_connection establish_connection configuration.merge( 'database' => 'postgres', 'schema_search_path' => 'public' ) end
def initialize(configuration)
def initialize(configuration) @configuration = configuration end
def purge
def purge clear_active_connections! drop create true end
def set_psql_env
def set_psql_env ENV['PGHOST'] = configuration['host'] if configuration['host'] ENV['PGPORT'] = configuration['port'].to_s if configuration['port'] ENV['PGPASSWORD'] = configuration['password'].to_s if configuration['password'] ENV['PGUSER'] = configuration['username'].to_s if configuration['username'] end
def structure_dump(filename)
def structure_dump(filename) set_psql_env search_path = configuration['schema_search_path'] unless search_path.blank? search_path = search_path.split(",").map{|search_path_part| "--schema=#{Shellwords.escape(search_path_part.strip)}" }.join(" ") end command = "pg_dump -i -s -x -O -f #{Shellwords.escape(filename)} #{search_path} #{Shellwords.escape(configuration['database'])}" raise 'Error dumping database' unless Kernel.system(command) File.open(filename, "a") { |f| f << "SET search_path TO #{connection.schema_search_path};\n\n" } end
def structure_load(filename)
def structure_load(filename) set_psql_env Kernel.system("psql -q -f #{Shellwords.escape(filename)} #{configuration['database']}") end