哪个 Ruby ORM 支持 PostgreSQL 数组数据类型?

Posted

技术标签:

【中文标题】哪个 Ruby ORM 支持 PostgreSQL 数组数据类型?【英文标题】:Which Ruby ORM supports PostgreSQL's Array Datatype? 【发布时间】:2011-05-06 14:34:27 【问题描述】:

我需要找到一个支持 PostgreSQL 的 Array 列数据类型的 Ruby ORM(Active Record、Sequel 等)。

http://www.postgresql.org/docs/8.2/interactive/arrays.html

有什么建议吗?

【问题讨论】:

【参考方案1】:

Sequel 的sql_subscript 仅用于在查询时访问值,正如您在之前的评论中提到的那样。

除此之外,Sequel 没有对数据库数组的特殊支持。您可以在 create_table 块中创建数组:

DB.create_table do
  column :numbers, 'integer[]'
end

但这并不是特殊的支持,因为 Sequel 只是传递类型。在构建查询时不支持将 ruby​​ 数组转换为 PostgreSQL 数组,也不支持在检索时将 PostgreSQL 数组转换为 ruby​​ 数组(它将作为字符串返回)。

话虽如此,Sequel 的设置使得 PostgreSQL 的数组和提供完全集成的 hstore 类型的扩展可以相对容易地实现。有人一直在做对hstore的支持(我觉得已经完成或者接近了,但是我还没有审核过),对数组的支持应该和那个差不多。未来版本的 Sequel 很可能会默认提供此类支持或作为官方扩展提供。

【讨论】:

我认为现在应该更新答案:ruby-forum.com/topic/3984710 ;)【参考方案2】:

Sequel 通过 Symbols(和其他)上的 sql_subscript 方法支持这一点。

最初通过 Symbol#|Symbol#/ 在 0.4.3 版(2007 年 12 月)中添加了支持,但在 2.12.0 版(2009 年 4 月)中更改为使用新方法。搜索 CHANGELOG 以了解更多关于随着时间的推移而发生的改进。

【讨论】:

如何使用 Sequel 将 ARRAY 值插入到新记录中? sql_subscript 看起来像一个只读访问器 自从我在 Postgres 中使用该数据类型已经有一段时间了,但是,我认为它实际上是作为字符串类型实现的。我将它用于某事并在我的代码中按摩值,我怀疑这是我通过 DBI 在 Perl 中所做的事情。已经好几年了,我没有访问代码,所以我无法查到它。 感谢您的提示。我刚刚结束了直接使用较低级别的 'pg' postgres 驱动程序。

以上是关于哪个 Ruby ORM 支持 PostgreSQL 数组数据类型?的主要内容,如果未能解决你的问题,请参考以下文章