我的应用程序正在使用PostgreSQL的intarray
扩展名。
不幸的是,根据docs和命令行,它似乎不可用:
> 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
功能)。
感谢。
答案 0 :(得分:5)
我得到的Postgres社区的普遍共识是,intarray
仅仅使用int[]
就已经过时了,并且它只是为了对非常旧的应用程序的向后兼容性而保留。这就是为什么我们没有增加对它的支持。
到目前为止,所有要求它的人实际上对int[]
感到高兴并且没有找到它。是否有一些用例实际上需要intarray
列?我们可以打开它。
答案 1 :(得分:4)
intarray
已在Heroku since March 2014上列入白名单,因此您应该可以直接启用该扩展程序。如果您在此之前配置了数据库,则首先需要upgrade your database。
答案 2 :(得分:2)
必须回答我自己的问题,只是为了提供更多细节。
intarray
用于从包含123/312/56/9863
等字符串的列中提取路径信息。首先将它(不良)存储为字符串而不是数组。
我们需要intarray
的原因是因为我们拥有idx
功能。
发生了什么事:
idx
所有这些都是作为临时措施完成的。但由于heroku无法支持idx
,因此使用它的唯一方法是添加custom function。
但我们将查询和数据结构转换为使用ltree
及其index
函数。
除了不需要依赖idx
(但在ltree
上引入另一个依赖项)之外,我们还将查询性能提高了x200倍。