Ruby Sequel 是否有对column_exists 和index_exists 等效的方法?我在文档中找不到任何内容。
db = MyApp::Base.db_base
db.column_exists?(:table, :column)
db.index_exists?(:table, :column)
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])
我在判断索引是否存在时遇到了问题。
也许这也会对你有帮助。
我正在使用 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
附注
小心‘和’字符