如何在/lib/sequel/extensions/
中存储的自定义Sequel扩展中定义Ruby方法,该方法将负责在加载扩展后立即创建SQL函数。我不想在数据库迁移文件中有方法定义。
我可以这样做:
Sequel.migration do
change do
create_table :some_table do
primary_key :id
String :uuid, null: false, default: Sequel.function(:uuid_generate_v4), unique: true
end
end
end
而且我知道uuid_generate_v4
存储在uuid-ossp
扩展名中,因此,要调用此函数,我要做的就是将扩展名添加到我的代码库中。
不幸的是,我不知道如何。定义此类函数并使之可调用而无需首先手动调用Ruby方法的最干净方法是什么?
我的扩展名文件:
module Sequel
module Extensions
module StringGenerator
def some_ruby_method
DB.create_function('sql_function_name', 'SELECT 1', :returns=>:integer)
end
end
Sequel::Database.register_extension(
:string_generator,
Sequel::Extensions::StringGenerator
)
end
end
如果不手动调用sql_function
,则无法通过代码访问some_ruby_method
。
uuid_generate_v4
作为扩展添加后如何执行,对于相同结果我需要做什么?
我认为您可能会混淆Sequel扩展名和PostgreSQL扩展名。 uuid-ossp
是PostgreSQL扩展。
具有Sequel扩展名,在加载时创建数据库功能可能不是一个好主意,但有可能。
[Sequel::Database.register_extension
可以接受一个块而不是一个模块,并且使用加载扩展的Sequel::Database
实例调用该块。