如何 运行 来自 Sequel 扩展的方法作为 SQL 函数
How to run a method from Sequel extension as SQL function
如何在存储在 /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
如果不手动调用 some_ruby_method
,则无法从代码访问 sql_function
。
uuid_generate_v4
如何在添加为扩展后立即执行以及我需要为相同的结果做些什么?
我认为您可能混淆了 Sequel 扩展和 PostgreSQL 扩展。 uuid-ossp
是 PostgreSQL 扩展。
让 Sequel 扩展在加载时创建数据库函数可能不是一个好主意,但这是可能的。
Sequel::Database.register_extension
可以接受一个块而不是一个模块,并且块用加载扩展的 Sequel::Database
实例调用。
如何在存储在 /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
如果不手动调用 some_ruby_method
,则无法从代码访问 sql_function
。
uuid_generate_v4
如何在添加为扩展后立即执行以及我需要为相同的结果做些什么?
我认为您可能混淆了 Sequel 扩展和 PostgreSQL 扩展。 uuid-ossp
是 PostgreSQL 扩展。
让 Sequel 扩展在加载时创建数据库函数可能不是一个好主意,但这是可能的。
Sequel::Database.register_extension
可以接受一个块而不是一个模块,并且块用加载扩展的 Sequel::Database
实例调用。