Sequel扩展程序作为SQL函数的运行方法

问题描述 投票:0回答:1

我想知道如何在自定义Sequel扩展名(存储在/lib/sequel/extensions/中)中定义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与作为扩展名添加后实际可执行文件有何不同,以及为达到相同结果我必须做什么?

ruby sequel sql-function
1个回答
0
投票

我认为您可能会混淆Sequel扩展名和PostgreSQL扩展名。 uuid-ossp是PostgreSQL扩展。使用Sequel扩展名在加载时创建数据库功能可能不是一个好主意,但是有可能。 Sequel::Database.register_extension可以接受一个块而不是一个模块,并使用加载扩展的Sequel::Database实例调用该块。

© www.soinside.com 2019 - 2024. All rights reserved.