[英]Rails PostgreSQL check if column is virtual
PostgreSQL 12 有一個很酷的Generated Columns功能,但我無法在 Rails 中檢查列是否是虛擬的。
作為參考,Rails 中的 MySQL 適配器允許您這樣做
MyModel.supports_virtual_columns?
=> true
MyModel.columns.last.virtual?
=> false
但是在 PostgreSQL 適配器中你不能做同樣的事情,盡管它確實支持生成的字段?
導軌 v.5.1.7
PostgreSQL 12 實現生成列的事實並不意味着您將通過 Rails PostgreSQLAdapter 使用接口來檢查列是否是虛擬的,因為它尚未實現(尚未實現)。
如果您在ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
看到了ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
的代碼supports_virtual_columns?
很簡單:
def supports_virtual_columns?
mariadb? || database_version >= "5.7.5"
end
雖然檢查列是否為虛擬的代碼聲明為:
def virtual?
/\b(?:VIRTUAL|STORED|PERSISTENT)\b/.match?(extra)
end
它檢查 Extra 值是否從
SHOW FULL FIELDS FROM table_name;
該列的查詢與 VIRTUAL、STORED 或 PERSISTENT 匹配,如果是,則返回 true。
但這在 PostgreSQL 對應版本中不存在。 supports_virtual_columns?
將在任何未開發此功能的適配器中返回 false,因為它在ActiveRecord::ConnectionAdapters::AbstractAdapter
定義為返回 false:
# Does this adapter support virtual columns?
def supports_virtual_columns?
false
end
從 rails 7開始為 postgresql 添加了該功能
所以你可以只做MyModel.columns.last.virtual?
就像使用 mysql 時一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.