Skip to content

PostgreSQL

データベースが動かすもの:pgvector、PostGIS、TimescaleDB、pg_cron などを備えた PostgreSQL 16、17、18、オーナーが作成できる拡張機能、ロール、新しいデータベースの始まり方、プラットフォームが維持する設定。まだ利用できません。

更新

**未公開。**データベースはまだ利用できません。このページは、構築中の仕組みを公開前に説明したもので、公開までに変わることがあります。

バージョン

データベースは、そのメジャーバージョン用のプラットフォームのイメージで、公式の Debian ビルドの PostgreSQL 16、17、18(デフォルト)を動かします。データベースのメジャーバージョンは変わりません。次のバージョンに移るには、別のデータベースを作成します。

拡張機能

オーナーはスーパーユーザーではありませんが、以下の拡張機能を CREATE EXTENSION で作成できます。PostgreSQL がスーパーユーザーにしか作成を許さない拡張機能は、許可リスト(pgextwlist)がオーナーのために作成します。

拡張機能 説明
vector, vectorscale pgvector と、Tiger Data の pgvectorscale:ベクトルとそのインデックス
postgis, postgis_raster, postgis_topology, postgis_tiger_geocoder, address_standardizer PostGIS
timescaledb TimescaleDB(Apache-2.0 の部分のみ)
pg_cron データベース内でのスケジュール実行のジョブ。オーナーはスキーマ cron を使える
pg_partman 時間の経過に合わせたパーティションの作成と削除
pgaudit ステートメントの監査ログ
pg_textsearch BM25 でランク付けする全文検索:17 と 18 のみ
pg_hint_plan, hypopg, pg_repack プランナーへのヒント、仮想インデックス、長いロックなしでのテーブルとインデックスの再編成
pg_stat_statements 各ステートメントのコスト
PostgreSQL 自身のモジュール pgcrypto、uuid-ossp、citext、hstore、ltree、pg_trgm、btree_gin、btree_gist、cube、earthdistance、fuzzystrmatch、unaccent、postgres_fdw、dblink、tablefunc、amcheck、pg_buffercache、pg_prewarm、pgstattuple、そのほかの contrib モジュールの大半

pg_stat_statements、pg_cron、pgaudit、timescaledb は PostgreSQL の起動時に読み込まれ、17 と 18 では pg_textsearch も読み込まれます。サーバーのファイルに触れる file_fdw と adminpack、pg_surgery、そして信頼されない手続き言語はすべて、意図的にリストから外しています。

ロール

  • オーナーの <database_name>_owner(作成時にデータベースに別の名前を付けなければ glacdb_owner)はデータベースを所有し、ロールグループ glac_superuser に属してその属性を持ちます。データベースとロールの作成、行レベルセキュリティのバイパス、レプリケーション、全データの読み書き、監視、ほかのセッションへのシグナル送信、サブスクライブ(16 以降)、メンテナンス(17 以降)ができ、これらを付与することもできます。スーパーユーザーではありません。
  • スーパーユーザーの postgres は、マシンのユーザー postgres として、マシン自身のソケットからしかログインできません。ネットワーク経由でログインすることはなく、誰かが知っているパスワードもありません。
  • それ以外のログインはすべて、SCRAM によるパスワードで行います。オーナーには、プラットフォームが SCRAM ベリファイアとして設定するまでパスワードがありません。パスワードそのものがマシンに届くことはありません。

新しいデータベースの始まり方

データベースのクラスターは、データベースの作成時に作られるわけではありません。イメージには、ビルド時に作られた(データチェックサム付きの initdb)クラスターが入っており、その中にはロールグループ、オーナー、データベースだけがあり、パスワードもデータもありません。最初の起動時に、イメージはそれをデータベースの空のドライブにコピーし、データベースとオーナーに作成時に指定された名前を付けます。それ以降、データベースが書き込むものはすべて専用のドライブ上にあり、プロジェクトの暗号鍵で暗号化されます。同じイメージから作られたデータベースは、1 つのクラスターからコピーしたクラスターと同じく、PostgreSQL のシステム識別子(pg_control)を共有します。

圧縮

  • 大きな値(TOAST)は、PostgreSQL 自身のデフォルトである pglz で圧縮されます(default_toast_compression)。lz4 も、それを求める列(ALTER TABLE … ALTER COLUMN … SET COMPRESSION lz4)、データベース、セッション(SET default_toast_compression = lz4)で使えます。高速ですが、値が大きくなることがあります。
  • 先行書き込みログのフルページイメージは zstd で圧縮されます(wal_compression)。

プラットフォームが維持する設定

プラットフォームは、起動のたびに、postgresql.conf の後、ALTER SYSTEM で設定したもの(これは保持します)の前に、次の設定を書き込みます。

  • max_connections はインスタンスのメモリに応じて決まります。1 GiB なら 104、2 GiB なら 209、4 GiB なら 419(最小 25)です。shared_buffers はメモリの 8 分の 1(最小 128 MB)です。
  • wal_level = replica、SCRAM による password_encryption、そして上記の圧縮。
  • PostgreSQL のログはデータベースのアプリのログに送られ、GET /v1/apps/{app}/logs で読めます(ログ)。

データディレクトリはデータベースのドライブ上の /var/lib/postgresql/data にあり、インスタンスの置き換えや削除の前に、PostgreSQL は高速シャットダウンで停止されます(開いているものはロールバックされ、チェックポイントが書き込まれます)。

ナビゲーション

キーワードを入力して検索…

↑↓ 移動↵ 選択Esc 閉じる