Custom UUID generator

23 views
Skip to first unread message

johnpea...@gmail.com

unread,
Jul 10, 2017, 12:26:56 AM7/10/17
to Ruby on Rails: Talk
Hi, I was reading the docs for primary key on postgresql  and I saw that there was a way to add a custom stored procedure that returns a UUID. There is a test case as well that uses a custom uuid generator https://github.com/rails/rails/blob/650ea5e5cf50d8a7242499463cf1762922d330a8/activerecord/test/cases/adapters/postgresql/uuid_test.rb#L193 but I wasn't sure how to to implement this myself. 

Like in the test case where do I place 'my_uuid_generator()' and how to implement it in my rails application?

Thanks.

Matt Hickman

unread,
Jul 10, 2017, 7:38:06 AM7/10/17
to rubyonra...@googlegroups.com
If you look my_uuid_generator() is added to postgres at https://github.com/rails/rails/blob/650ea5e5cf50d8a7242499463cf1762922d330a8/activerecord/test/cases/adapters/postgresql/uuid_test.rb#L186

You can add a stored procedure in a similar fashion in a migration.

--
Matt Hickman

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/06bd9a3c-eafa-496b-a611-2d35906517a3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

johnpea...@gmail.com

unread,
Jul 10, 2017, 3:39:18 PM7/10/17
to Ruby on Rails: Talk
That's what I thought but I wasn't sure where to place the uuid_function that the migration refers to. So that go in a helper file or part of the migration?


On Monday, July 10, 2017 at 4:38:06 AM UTC-7, Matt Hickman wrote:
You can add a stored procedure in a similar fashion in a migration.

--
Matt Hickman

On Sun, Jul 9, 2017 at 6:56 PM, <johnpea...@gmail.com> wrote:
Hi, I was reading the docs for primary key on postgresql  and I saw that there was a way to add a custom stored procedure that returns a UUID. There is a test case as well that uses a custom uuid generator https://github.com/rails/rails/blob/650ea5e5cf50d8a7242499463cf1762922d330a8/activerecord/test/cases/adapters/postgresql/uuid_test.rb#L193 but I wasn't sure how to to implement this myself. 

Like in the test case where do I place 'my_uuid_generator()' and how to implement it in my rails application?

Thanks.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.

Matt Hickman

unread,
Jul 10, 2017, 5:10:34 PM7/10/17
to rubyonra...@googlegroups.com
uuid_function is defined - https://github.com/rails/rails/blob/650ea5e5cf50d8a7242499463cf1762922d330a8/activerecord/test/cases/adapters/postgresql/uuid_test.rb#L14 - it just switches on if postgres supports gen_random_uuid() otherwise it uses uuid_generate_v4()

gen_random_uuid() is part of the pgcrypto module - https://www.postgresql.org/docs/9.5/static/pgcrypto.html

uuid_generate_v4() is part of the uuid-ossp module - https://www.postgresql.org/docs/9.5/static/uuid-ossp.html
July 10, 2017 at 12:39 PM via Postbox

For more options, visit https://groups.google.com/d/optout.


--
Matt

John Pearson

unread,
Jul 10, 2017, 5:37:51 PM7/10/17
to rubyonra...@googlegroups.com
My question, if this is my migration:

migration.rb
def change

connection.execute <<-SQL
CREATE OR REPLACE FUNCTION john_uuid_generator() RETURNS uuid
AS $$ SELECT * FROM #{uuid_function} $$
LANGUAGE SQL VOLATILE;
SQL

end


Where do I define john_uuid_generator()?

Thanks!


On Mon, Jul 10, 2017 at 2:10 PM, Matt Hickman <matt.h...@gmail.com> wrote:
uuid_function is defined - https://github.com/rails/rails/blob/650ea5e5cf50d8a7242499463cf1762922d330a8/activerecord/test/cases/adapters/postgresql/uuid_test.rb#L14 - it just switches on if postgres supports gen_random_uuid() otherwise it uses uuid_generate_v4()

gen_random_uuid() is part of the pgcrypto module - https://www.postgresql.org/docs/9.5/static/pgcrypto.html

uuid_generate_v4() is part of the uuid-ossp module - https://www.postgresql.org/docs/9.5/static/uuid-ossp.html
July 10, 2017 at 12:39 PM via Postbox
That's what I thought but I wasn't sure where to place the uuid_function that the migration refers to. So that go in a helper file or part of the migration?

On Monday, July 10, 2017 at 4:38:06 AM UTC-7, Matt Hickman wrote:
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.


--
Matt

--
You received this message because you are subscribed to a topic in the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/rubyonrails-talk/5Y-7-LLFKGw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/5963ED2A.8060808%40gmail.com.

Matt Hickman

unread,
Jul 10, 2017, 6:19:06 PM7/10/17
to rubyonra...@googlegroups.com
That statement you pasted defines it, it's stored as a function in postgres. See https://www.postgresql.org/docs/9.5/static/xfunc-sql.html for docs on how this works in postgres.

July 10, 2017 at 2:36 PM via Postbox
My question, if this is my migration:

migration.rb
def change

connection.execute <<-SQL
CREATE OR REPLACE FUNCTION john_uuid_generator() RETURNS uuid
AS $$ SELECT * FROM #{uuid_function} $$
LANGUAGE SQL VOLATILE;
SQL

end


Where do I define john_uuid_generator()?

Thanks!



--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAKNtY_x1qm_VXqcUdMXQ8pytHQF2tFuLAmgnv%2Bvf-8uZGXBMqw%40mail.gmail.com.

For more options, visit https://groups.google.com/d/optout.


--
Matt
Reply all
Reply to author
Forward
Message has been deleted
0 new messages