Heroku Postgres での拡張機能、PostGIS、フルテキスト検索辞書
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2021年11月19日(金)
Table of Contents
拡張機能では、機能の関連する部分 (データ型や関数など) をまとめてバンドルし、1 つのコマンドでデータベースにインストールすることができます。Heroku Postgres は、多くの Postgres 拡張機能のほか、拡張機能システムの一部としてバンドルされていないフルテキスト検索などの機能をサポートしています。PostGIS 空間データベース拡張機能のベータバージョンも使用できます。
サポートされている拡張機能の一覧については、データベースのクエリを実行してください。
$ echo 'show extwlist.extensions' | heroku pg:psql
extwlist.extensions
-----------------------------
...bloom,btree_gin,btree_gist,cube,dblink,dict_int...
いずれかのサポートされている拡張機能を作成するには、heroku pg:psql
でセッションを開き、適切なコマンドを実行します。
$ heroku pg:psql DATABASE_URL -a example-app
--> Connecting to postgresql-octagonal-41284
psql (13.2, server 11.12 (Ubuntu 11.12-1.pgdg16.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
example-app::DATABASE=> CREATE EXTENSION hstore;
CREATE EXTENSION
example-app::DATABASE=>
データ型
Bloom は、空間効率の高いブルームフィルターのインデックスを提供します。
create extension bloom
Case Insensitive Text。大文字と小文字が区別されないテキストデータ型。citext に保存された文字列は大文字小文字の情報を保持しますが、クエリで使用されるときは大文字と小文字が区別されません。
create extension citext
Cube: 多次元の立方体。
create extension cube
HStore: Postgres 内のキー値ストア。
create extension hstore
Label Tree: 関数が関連付けられているツリー状の階層。
create extension ltree
Large Objects: 特殊なラージオブジェクト構造に保存されているユーザーデータへのストリーム形式のアクセスを提供します。
create extension lo
Product Numbering: 製品 ID およびシリアル番号 (UPC、 ISBN、ISSN など) を保存します。
create extension isn
Seg: セグメントまたは浮動小数点区間を表すための型を提供します。
create extension seg
外部データラッパー
- postgres_fdw を使用すると、Postgres データベースは、外部サーバーとして別の Postgres データベースにアクセスできます。
外部データラッパーは、Hobby 層のデータベースでは使用できません。
関数
Address Standardizer: 一連の定義されたルールに関するアドレスを正規化する 1 行のアドレスパーサー
create extension address_standardizer
。US アドレスの一連のルールはすでに含まれていますcreate extension address_standardizer_data_us
。Autoinc: シーケンスの次の値を整数フィールドに保存します。
create extension autoinc
Earth Distance: 地球上の地点間の距離を計算するための関数。
create extension earthdistance
Fuzzy Match: 文字列間の類似性を判定するための別の方法。UTF-8 のサポートは限定されています。
create extension fuzzystrmatch
のようなコードを使用して、イベントを表す sObject を作成して適切なエンドポイントに POST します。Insert Username: 現在のユーザーの名前をテキストフィールドに挿入します。
create extension insert_username
Intarray: 整数の null のない配列のソート、操作、およびそのインデックスの作成を行います。
create extension intarray
ModDateTime: 現在のタイムスタンプをタイムスタンプフィールドに挿入します。
create extension moddatetime
PGCrypto: 暗号化関数によってデータベース内の暗号化が可能になります
create extension pgcrypto
。pg_partman: 時間ベースとシリアルベースの両方のテーブルパーティションセットを作成して管理します。サブパーティション分割もサポートされています。
pg_prewarm: 新しく起動されるデータベースや休止データベースのパフォーマンスを正規化するために、オペレーティングシステムまたはデータベースバッファキャッシュにデータを事前ロードします。
pg_partman と pg_prewarm は、Hobby 層のデータベースでは使用できません。
sslinfo: 接続しているクライアントに関する SSL 情報のクエリを実行するための関数を提供します。
create extension sslinfo
Table Functions & Pivot Tables: 完全なテーブルを返す関数。スプレッドシートのピボットテーブルと同様の方法でクエリ結果を操作する機能を含みます
create extension tablefunc
。tcn: リスナーにテーブルへの変更を通知するためのトリガー関数を提供します。
create extension tcn
Timetravel: 履歴データのクエリを実行するための関数を追加します。
create extension timetravel
Trigram: トライグラムの一致に基づいて、英数字の文字列の類似性 (または、それがないこと) を判定します。検索などの自然言語処理の問題に有効です。
create extension pg_trgm
。tsm_system_rows: システム行を使用したテーブルサンプリングを提供します。
create extension tsm_system_rows
tsm_system_time: システム時刻を使用したテーブルサンプリングを提供します。
create extension tsm_system_time
UUID Generation: データベース内の v1、v3、v4、v5 の UUID を生成します。既存の UUID データ型と適切に連携します。
create extension "uuid-ossp"
のようなコードを使用して、イベントを表す sObject を作成して適切なエンドポイントに POST します。
統計
- Row Locking:
テーブルの行ロックの情報を表示します。
create extension pgrowlocks
インデックスの種類
btree-gist: GiST インデックス演算子。これは一般に、btree では使用できない複数列インデックスや排他制約を除き、標準の btree インデックスより劣っています。
create extension btree_gist
btree-gin: GIN インデックス演算子。これは一般に、新しい GIN 演算子クラスの開発、または GIN インデックス可能列と btree インデックス可能列の両方に対する複数列 GIN インデックスの作成を除き、標準の btree インデックスより劣っています。
フルテキスト検索辞書
dict-int - 整数のインデックスの作成方法を制御する、フルテキスト検索のためのフルテキスト検索辞書。
create extension dict_int
unaccent - 文字からアクセントを削除するフィルタリングテキスト辞書。
create extension unaccent
さらに、次の辞書はデフォルトでインストールされるため、拡張機能システムを使用して作成する必要はありません。
$ heroku pg:psql
=> \dFd
List of text search dictionaries
Schema | Name | Description
------------+-----------------+-------------------------------
pg_catalog | danish_stem | snowball stemmer for danish language
pg_catalog | dutch_stem | snowball stemmer for dutch language
pg_catalog | english_stem | snowball stemmer for english language
pg_catalog | finnish_stem | snowball stemmer for finnish language
pg_catalog | french_stem | snowball stemmer for french language
pg_catalog | german_stem | snowball stemmer for german language
pg_catalog | hungarian_stem | snowball stemmer for hungarian language
pg_catalog | italian_stem | snowball stemmer for italian language
pg_catalog | norwegian_stem | snowball stemmer for norwegian language
pg_catalog | portuguese_stem | snowball stemmer for portuguese language
pg_catalog | romanian_stem | snowball stemmer for romanian language
pg_catalog | russian_stem | snowball stemmer for russian language
pg_catalog | simple | simple dictionary: just lower case and check for stopword
pg_catalog | spanish_stem | snowball stemmer for spanish language
pg_catalog | swedish_stem | snowball stemmer for swedish language
pg_catalog | turkish_stem | snowball stemmer for turkish language
dblink
dblink: Postgres データベース間のクエリのサポートを追加します。dblink を使用すると、個別の Heroku Postgres データベース間で、または外部の Postgres データベースとの間でクエリを実行できます。
dblink は、Hobby 層のデータベースでは使用できません。
pg_stat_statements
pg_stat_statements モジュールは、サーバーによって実行されている すべての SQL ステートメントの実行統計を追跡するための手段を 提供します。
使用法
pg_stat_statements を使用すると、パフォーマンスの問題を追跡 できます。これにより、実行された各クエリとそれに関連するコストを表示する pg_stat_statements と呼ばれるビューが表示されます。これには、クエリが実行された回数、全体としてかかった合計のシステム実行時間、全体としてヒットした共有メモリ内のブロックの合計数が含まれます。
pg_stat_statements では、それまでの実行時間の長さには関係なく、取り消されたクエリは取得されません。つまり、statement_timeout
によって取り消された長時間実行クエリは pg_stat_statements ビューに反映されません。取り消された高コストのクエリを効果的に診断するには、Postgres ログを使用する必要があります。
PostGIS
PostGIS:
PostgreSQL オブジェクトリレーショナルデータベースに 地理オブジェクトのサポートを追加します。実際上、PostGIS は PostgreSQL サーバーを “空間的に有効にする” ため、地理情報システム (GIS) のバックエンド 空間データベースとして使用できます。
Heroku Postgres での PostGIS サポートはベータ版であり、将来変更される可能性があります。
要件
現在、PostGIS は、Postgres バージョン 9.4 以上を使用する本番プラン Heroku Postgres プラン と Hobby プランでのみ使用できます。Heroku Postgres で現在サポートされている PostGIS の最新バージョンは v2.5 です。
プロビジョニング
データベースが上記の要件を満たしている限り、他の拡張機能と同様に PostGIS サポートを追加できます。
$ heroku addons:create heroku-postgresql:standard-0
その後、create extension postgis
を実行するだけです。また、この機能が新しいデータベースでしか使用できないことにも注意してください。データベースが上記の要件を満たしているが、create extension postgis
の実行時に引き続きエラーが表示される場合は、高速切り替え
手順を使用して PostGIS サポートのある新しいデータベースに移行できます。
データベースに PostGIS がインストールされているかどうかを検出するには、psql から次のクエリを実行します。
=> SELECT postgis_version();
postgis_version
---------------------------------------
2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)
サポートされなくなった拡張機能
- PLV8 - この拡張機能の Heroku ベータ期間中、Debian/Ubuntu での PG11+ に対する PLV8 パッケージのメンテナンスは廃止されました。詳細は、ここを参照してください。これが変更されれば、PLV8 を再び設定する可能性があります。