Migrate postgresql database to uuid

Hi all,

I am using rails 3.1 and ruby 1.9.3,Now i want to use uuid concept in
rails 3 for existing data

so i did like :-

create_table :posts, :id => false do |t|
t.string :uuid, :limit => 36, :primary => true
end

ActiveRecord::Base.class_eval do

old rails versions

set_primary_key ‘uuid’

before_create :generate_uuid
def generate_uuid
self.id = UUIDTools::UUID.random_create.to_s
end
end

This is working for new data,now i want to migrate existing data with
relation.for uuid they are using datatype as string,in postgresql the
data type used for primary_key and foreign key is integer ,so if i am
trying to change foreign key integer to string it is throwing error.

Could you please tell me some example,how to do this.

kingston.s

By default, a table on PostgreSQL does not register UUID…
It might work only for new tables you create, because to Postgres use
UUID
you need say it when creating the table… for existing ones, it might
not
happen because the table on PostgreSQL may not have been created with
the
option to use Uuids.

Atenciosamente,

Carlos Figueiredo

On Fri, Oct 25, 2013 at 11:17 AM, kingston jenorish.s <

You might need to write a migration or rake task for this purpose.

Migration may look like this.

class MigrateData < ActiveRecord::Migration
def change
get_all_models.each do |model|
model.where(’’).find_each do |model_instance|
model_instance.update_attributes id:
UUIDTools::UUID.random_create.to_s
end
end
end

def get_all_models
Module.constants.select do |constant_name|
constant = eval constant_name
if not constant.nil? and constant.is_a? Class and
constant.superclass == ActiveRecord::Base
constant
end
end
endend

This migration will iterate over all the models in your app and generate
UUID for each single instance.

I could not understand that what do you mean by single instance
migration
with relation. Can you please elaborate more?

For single instance migration we could do like this,what to be done if i
want to migrate single instance with the relation?

I have model called user.

user.rb

class User < ActiveRecord::Base

has_many :sites,:through=>:site_user_roles
belongs_to :country
has_many :payments
has_and_belongs_to_many :events

end

like above i am having lots of association,now i want to migrate all the
relation to uuid.

By looking at your code, I assume that you have these models in your
application. Site, Country,Payment, SiteUserRole and Event. If that’s
true
then you don’t have to worry about that. The migration, that I shared
before, will iterate through all these models and ID in every database
table will be replaced with generated UUID.