2

私が持っているアプリintarrayは、PostgreSQL の拡張機能を使用しています。

残念ながら、ドキュメントとコマンドラインによると、利用できないようです:

> 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) こととは別に、クエリのパフォーマンスも 200 倍向上しました。

于 2013-02-27T00:16:00.053 に答える