_存在吗? Ruby Sequel Activerecord 等效项

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

Ruby Sequel 是否有对column_exists 和index_exists 等效的方法?我在文档中找不到任何内容。

db = MyApp::Base.db_base

db.column_exists?(:table, :column)
db.index_exists?(:table, :column)
ruby activerecord rubygems sequel
2个回答
2
投票

Sequel 没有相同的方法,但允许您执行相同的操作:

# column_exists?
db.schema(:table_name).map(&:first).include?(:column_name)
# index_exists?
db.indexes(:table_name).values.map{|x| x[:columns]}.include?([:column_name])

0
投票

我在判断索引是否存在时遇到了问题。
也许这也会对你有帮助。
我正在使用 gem Sequel 版本 5.57.0。

上面的命令没有找到索引。

db.indexes(:table_name)
=> []

但是,我确信该索引存在。 我尝试以另一种方式获取信息:

db.fetch("SHOW INDEX FROM `table_name`").all
=> [{:Table=>"table_name",
  :Non_unique=>1,
  :Key_name=>"table_name_created_at_index",
  :Seq_in_index=>1,
  :Column_name=>"created_at",
  :Collation=>"A",
  :Cardinality=>0,
  :Sub_part=>191,
  :Packed=>nil,
  :Null=>"YES",
  :Index_type=>"BTREE",
  :Comment=>"",
  :Index_comment=>""}]

可以通过如下方式检查是否有索引:

def index_exists?(table:, index_name:)
  db.fetch("SHOW INDEX FROM `#{table}` WHERE Key_name='#{index_name}'").all.present?
end

index_exists?(table: 'table_name', index_name: 'table_name_created_at_index')
=> true

附注
小心‘和’字符

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