Rails PostgreSQL 检查列是否为虚拟列
Rails PostgreSQL check if column is virtual
PostgreSQL 12 有一个很酷的 Generated Columns 功能,但我无法在 Rails.
中检查列是否为虚拟列
作为参考,MySQL适配器在Railsallows你喜欢
MyModel.supports_virtual_columns?
=> true
MyModel.columns.last.virtual?
=> false
但是在 PostgreSQL Adapter 中你不能做同样的事情,尽管它支持生成字段?
Rails v.5.1.7
PostgreSQL 12 实现生成列的事实并不意味着您将通过 Rails PostgreSQLAdapter 接口来检查列是否为虚拟列,因为它尚未实现(尚未) .
如果您在 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
检查额外值是否return来自
SHOW FULL FIELDS FROM table_name;
对该列的查询与 VIRTUAL、STORED 或 PERSISTENT 匹配,如果匹配,则 return 为真。
但这在 PostgreSQL 对应项中不存在。 supports_virtual_columns?
将在任何未开发此功能的适配器中 return false,因为它在 ActiveRecord::ConnectionAdapters::AbstractAdapter
到 return false:
中定义
# Does this adapter support virtual columns?
def supports_virtual_columns?
false
end
为 postgresql 添加了该功能 since rails 7
所以你可以像使用 mysql
那样做 MyModel.columns.last.virtual?
PostgreSQL 12 有一个很酷的 Generated Columns 功能,但我无法在 Rails.
中检查列是否为虚拟列作为参考,MySQL适配器在Railsallows你喜欢
MyModel.supports_virtual_columns?
=> true
MyModel.columns.last.virtual?
=> false
但是在 PostgreSQL Adapter 中你不能做同样的事情,尽管它支持生成字段?
Rails v.5.1.7
PostgreSQL 12 实现生成列的事实并不意味着您将通过 Rails PostgreSQLAdapter 接口来检查列是否为虚拟列,因为它尚未实现(尚未) .
如果您在 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
检查额外值是否return来自
SHOW FULL FIELDS FROM table_name;
对该列的查询与 VIRTUAL、STORED 或 PERSISTENT 匹配,如果匹配,则 return 为真。
但这在 PostgreSQL 对应项中不存在。 supports_virtual_columns?
将在任何未开发此功能的适配器中 return false,因为它在 ActiveRecord::ConnectionAdapters::AbstractAdapter
到 return false:
# Does this adapter support virtual columns?
def supports_virtual_columns?
false
end
为 postgresql 添加了该功能 since rails 7
所以你可以像使用 mysql
那样做MyModel.columns.last.virtual?