Postgres の互換性

このページでは、Lakebase Postgres と標準 Postgres の互換性について説明します。 マネージド Postgres サービスとして、いくつかの違いと制限があります。

Postgres バージョンのサポート

LakebaseはPostgres 16、Postgres 17、Postgres 18をサポートしています。 Postgres 17 が既定のバージョンです。 Postgres 18 を使用するには、新しいプロジェクトを作成するときに選択します。

Postgres 拡張機能のサポート

Lakebase では、多数の Postgres 拡張機能がサポートされています。 完全な一覧については、「 Postgres 拡張機能」を参照してください。

セッション、メモリ、ストレージ

セッション コンテキスト

Lakebase scale-to-0 機能は、非アクティブな期間が経過すると、アイドル状態の接続を自動的に閉じます。

接続が閉じられると、一時テーブル、準備されたステートメント、アドバイザリ ロック、 NOTIFY コマンド、 LISTEN コマンドなど、セッション コンテキスト内のすべてのものが失われます。

セッションレベルのコンテキストの損失を回避するには、スケール・トゥ・ゼロを無効にします。 ただし、そうすることで、コンピューティングは 24 時間 365 日実行されます。

記憶

SQL クエリとインデックス ビルドでは、メモリに収まらない可能性がある大量のデータが生成される可能性があります。 コンピューティングのサイズによって、使用可能なメモリの量が決まります。

ログ記録されないテーブル

ログに記録されていないテーブルは、Postgres 先行書き込みログ (WAL) に書き込まないテーブルです。 これらのテーブルはコンピューティング ローカル ストレージに格納され、コンピューティングの再起動またはコンピューティングがゼロにスケーリングされた場合は保持されません。 これは標準の Postgres とは異なり、ログに記録されていないテーブルは、異常なプロセス終了が発生した場合にのみ切り捨てられます。 また、ログに記録されていないテーブルは、コンピューティング ローカル ディスク領域によって制限されます。 Lakebase では、Postgres で使用される一時ファイルに対して、20 GiB のローカル ディスク領域または最大コンピューティング サイズ (いずれか高い方) の 15 GiB が割り当てられます。

一時テーブル

一時テーブルは、セッション (または必要に応じてトランザクション) の有効期間にのみ存在します。 ログ記録されていないテーブルと同様に、これらはコンピューティング ローカル ストレージに格納され、ローカル ディスク領域によって制限されます。

Postgres ログ

Postgres ログへのアクセスはサポートされていません。

統計コレクション

Postgres 累積統計システム によって収集された統計は、コンピューティング (Postgres が実行される場所) がゼロにスケーリングされるときに保存されません。 統計が失われるのを防ぐために、ゼロへのスケール機能を無効にすることができます。 ただし、スケールを 0 に無効にすると、コンピューティングは 24 時間 365 日実行されます。

Postgres パラメーターの設定

マネージド Postgres サービスとして、多くのデータベース パラメーターがコンピューティング サイズに基づいて設定されます。 次を使用して、すべてのデータベース パラメーター設定を表示します。

SHOW ALL;

セッション、データベース、またはロール レベルで user コンテキストを持つパラメーターを構成できます。 インスタンス レベルでパラメーターを構成することはできません。

  • セッション、データベース、またはロール レベルで設定できるパラメーターを表示します。

    SELECT name
    FROM pg_settings
    WHERE context = 'user';
    
  • セッションのパラメーターを設定します。

    SET maintenance_work_mem='1 GB';
    
  • データベースに接続されているすべてのセッションのパラメーターを設定します。

    ALTER DATABASE databricks_postgres SET maintenance_work_mem='1 GB';
    
  • 特定のユーザーからのすべてのセッションのパラメーターを設定します。

    ALTER USER "john@company.com" SET maintenance_work_mem='1 GB';
    

データベースのエンコードと照合順序

データベース エンコード

既定では、C.UTF-8 照合順序が使用されます。 C.UTF-8 では、UTF-8 でエンコードされた文字の全範囲がサポートされています。

UTF8 エンコード (Unicode、8 ビット可変幅エンコード) もサポートされています。

データベースのエンコードと照合順序を表示するには、次のクエリを実行します。

SELECT
    pg_database.datname AS database_name,
    pg_encoding_to_char(pg_database.encoding) AS encoding,
    pg_database.datcollate AS collation,
    pg_database.datctype AS ctype
FROM
    pg_database
WHERE
    pg_database.datname = 'your_database_name';

Postgres では、データベースのエンコードまたは照合順序を作成後に変更することはできません。

照合順序

SQLのコレーションは、OSにインストールされたライブラリによって提供されるロケールにSQL名を割り当てるSQLスキーマオブジェクトです。

既定では、Lakebase は C.UTF-8 照合順序を使用します。 Lakebase でサポートされているもう 1 つのプロバイダーは、外部 icu ライブラリを使用するです。

ロケール固有の並べ替えまたは大文字と小文字の変換が必要な場合に備えて、Lakebase には 定義済みの icu ロケール の完全なシリーズが用意されています。

  • 定義済みロケールをすべて表示します。
SELECT * FROM pg_collation;
  • 定義済みの icu ロケールを使用してデータベースを作成します。
CREATE DATABASE my_arabic_db
LOCALE_PROVIDER icu
icu_locale 'ar-x-icu'
template template0;
  • 個々の列のロケールを指定します。
CREATE TABLE my_ru_table (
    id serial PRIMARY KEY,
    russian_text_column text COLLATE "ru-x-icu",
    description text
);

機能の制限事項

ロールとアクセス許可

  • ホスト オペレーティング システムにアクセスできません。
  • Postgres superuserを使用して接続することはできません。
    • superuser特権または直接のローカル ファイル システム アクセスを必要とする機能は許可されません。
    • databricks_superuserは Postgres superuser ロールの代わりに使用されます。 このロールに関連付けられている特権の詳細については、「ロールの 管理」を参照してください。

レプリケーション

ネイティブ Postgres 論理レプリケーションを使用して Lakebase データベース間でデータをレプリケートすることはできません。

テーブルスペース

Lakebase は Postgres テーブルスペースをサポートしていません。 CREATE TABLESPACE コマンドを使用して表スペースを作成しようとすると、エラーが発生します。 これは、カスタム ストレージの場所に対するファイル システムへの直接アクセスを許可しない、Lakebase のマネージド クラウド アーキテクチャが原因です。

異なるストレージ デバイス間でデータベース オブジェクトを整理するためにテーブルスペースを使用する既存のアプリケーションまたはスクリプトがある場合は、Lakebase に移行するときにこれらの参照を削除または変更する必要があります。