2

我拥有的应用程序正在使用intarrayPostgreSQL 的扩展。

不幸的是,根据文档和命令行,它似乎不可用:

> echo 'show extwlist.extensions' | heroku pg:psql
                                                                                extwlist.extensions                                                                                 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 btree_gist,chkpass,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,isn,ltree,pg_trgm,pgcrypto,pgrowlocks,pgstattuple,plpgsql,unaccent,uuid-ossp,citext,tablefunc
(1 row)

还:

> heroku pg:psql
psql (9.1.5, server 9.1.6)
SSL connection
Type "help" for help.

=> CREATE EXTENSION intarray;
WARNING:  extension "intarray" is not whitelisted
CREATE EXTENSION

那么这是否意味着我不能使用 Heroku或者有一种方法可以添加intarray扩展(idx例如使用函数)。

谢谢。

4

3 回答 3

5

我得到的 Postgres 社区的普遍共识是intarray,仅仅使用它就已经过时了int[],它只是为了向后兼容非常旧的应用程序而保留下来。这就是为什么我们没有添加对它的支持。

到目前为止,要求它的每个人实际上都更满意int[],只是没有找到它。是否有一些用例您实际上想要一个intarray列?我们可以打开它。

于 2013-02-01T04:42:18.500 回答
4

intarray自 2014 年 3 月以来已在 Heroku 上列入白名单,因此您应该能够直接启用该扩展。如果您在此之前配置了您的数据库,您首先需要升级您的数据库

于 2015-05-27T22:36:09.367 回答
2

必须回答我自己的问题只是为了提供更多细节。

intarray用于从包含字符串的列中提取路径信息,例如123/312/56/9863. 这首先存储为(很差)作为字符串而不是数组。

我们需要的原因intarray是因为我们有这个idx功能。

发生的事情是这样的:

  • 将字符串转换为数组
  • 使用idx
  • 按顺序返回下一个数字。

所有这些都是临时措施。但是由于 heroku 不支持idx使用它的唯一方法是添加自定义函数。但相反,我们将查询和数据结构转换为使用ltree及其index功能。

除了不需要依赖idx(但引入了另一个依赖ltree)之外,我们还将查询的性能提高了 x200 倍。

于 2013-02-27T00:16:00.053 回答