Add new cdb schema

pull/280/head
David Arango 11 years ago
parent 71044f27fd
commit 65d7ad274f

@ -8,7 +8,7 @@ In absence of specific instructions, after upgrading the rails code to
$ bundle exec rake db:migrate
$ bundle exec rake cartodb:db:load_functions
$ bundle exec rake cartodb:db:load_triggers
$ bundle exec rake cartodb:db:create_importer_schema
$ bundle exec rake cartodb:db:create_schemas
$ bundle exec rake cartodb:db:migrate_to[<version>]
NOTE: redis server must be listening on the configured

@ -659,18 +659,28 @@ class User < Sequel::Model
end
end.join
create_importer_schema
create_schemas_and_set_permissions
set_database_permissions
set_database_permissions_in_importer_schema
load_cartodb_functions
end
end
def create_importer_schema
def create_schemas_and_set_permissions
create_schema('cdb')
create_schema('cdb_importer')
set_database_permissions_in_schema('cdb')
set_database_permissions_in_schema('cdb_importer')
end
# Attempts to create a new database schema
# Does not raise exception if the schema already exists
def create_schema(schema)
in_database(as: :superuser) do |database|
database.run(%Q{CREATE SCHEMA cdb_importer})
database.run(%Q{CREATE SCHEMA #{schema}})
end
end #create_importer_schema
rescue Sequel::DatabaseError => e
raise unless e.message =~ /schema .* already exists/
end #create_schema
# Cartodb functions
def load_cartodb_functions(files = [])
@ -709,11 +719,9 @@ class User < Sequel::Model
end
# Whitelist Permissions
def set_database_permissions_in_importer_schema
def set_database_permissions_in_schema(schema)
in_database(:as => :superuser) do |user_database|
user_database.transaction do
schema = 'cdb_importer'
# grant core permissions to database user
user_database.run("GRANT ALL ON SCHEMA #{schema} TO #{database_username}")
@ -724,7 +732,7 @@ class User < Sequel::Model
yield(user_database) if block_given?
end
end
end #set_database_permissions_in_importer_schema
end #set_database_permissions_in_schema
def set_database_permissions
in_database(:as => :superuser) do |user_database|

@ -1,34 +1,21 @@
# encoding: utf-8
namespace :cartodb do
namespace :db do
desc 'Create importer schema and assign privileges to owner'
task :create_importer_schema => :environment do
def needs_importer_schema?(user)
!user.in_database[%Q(SELECT * FROM pg_namespace)]
.map { |record| record.fetch(:nspname) }
.include?('cdb_importer')
rescue => exception
false
end #needs_importer_schema?
desc 'Create cartodb schemas and assign privileges to owner'
task :create_schemas => :environment do
count = User.count
User.all.each_with_index { |user, index|
User.all.each_with_index do |user, index|
begin
unless needs_importer_schema?(user)
printf "OK %-#{20}s (%-#{4}s/%-#{4}s)\n", user.username, index, count
next
end
puts "Creating cdb_importer schema for #{user.username}"
user.create_importer_schema
user.set_database_permissions_in_importer_schema
puts "Creating database schemas for #{user.username}"
user.create_schemas_and_set_permissions
printf "OK %-#{20}s (%-#{4}s/%-#{4}s)\n", user.username, index, count
rescue => exception
printf "FAIL %-#{20}s (%-#{4}s/%-#{4}s) #{exception.message}\n", user.username, index, count
end
sleep(1.0/5.0)
}
end
end
end
end

Loading…
Cancel
Save