メインコンテンツまでスキップ

Postgresとの互換性

備考

ベータ版

Lakebase Postgres (オートスケール Beta) は、 Lakebase の次のバージョンであり、評価のみに利用できます。 本番運用ワークロードの場合は、 Lakebase Public Previewを使用します。 どのバージョンが適しているかを判断するには、バージョンの選択を参照してください。

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

Postgresのバージョンサポート

Lakebase オートスケール Beta は Postgres 16 と Postgres 17 をサポートします。

Postgres拡張機能のサポート

Lakebase は多数の Postgres 拡張機能をサポートしています。完全なリストについては、 Postgres 拡張機能を参照してください。

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

セッションコンテキスト

Lakebase のスケール トゥ ゼロ機能は、一定期間アクティビティがないとアイドル状態の接続を自動的に閉じます。

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

セッション レベルのコンテキストが失われないようにするには、scale-to-zero を無効にすることができます。ただし、これを実行すると、コンピュートは 24 時間 365 日実行されることになります。

メモリ

SQL クエリとインデックス構築により、メモリに収まらない大量のデータが生成される場合があります。コンピュートのサイズによって、使用可能なメモリの量が決まります。

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

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

一時テーブル

一時テーブルは、セッション (またはオプションでトランザクション) の有効期間中のみ存在します。ログを取らないテーブルと同様に、これらはコンピュートのローカル ストレージに保存され、ローカル ディスク容量によって制限されます。

Postgresログ

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

統計収集

Postgres累積統計システムによって収集された統計は、コンピュート (Postgres 実行) がゼロにスケールされると保存されません。 統計情報が失われないようにするには、スケール トゥ ゼロ機能を無効にすることができます。ただし、ゼロへのスケールを無効にすると、コンピュートが年中無休で実行されることになります。

Postgres 設定の問題

マネージド Postgres サービスとして、多くのデータベースはコンピュート サイズに基づいて設定されます。 以下を使用して、データベース設定をすべて表示します。

SQL
SHOW ALL;

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

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

    SQL
    SELECT name
    FROM pg_settings
    WHERE context = 'user';
  • セッションに問題を設定します。

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

    SQL
    ALTER DATABASE lakebase SET maintenance_work_mem='1 GB';
  • 特定のユーザーからのすべてのセッションに対して「問題」を設定します。

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

データベースのエンコーディングと照合

データベースエンコーディング

デフォルトでは、C.UTF-8 照合が使用されます。C.UTF-8 は、UTF-8 でエンコードされた文字の全範囲をサポートします。

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

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

SQL
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 名をオペレーティング システムにインストールされているライブラリによって提供されるロケールにマッピングする SQL スキーマ オブジェクトです。

デフォルトでは、Lakebase はC.UTF-8照合を使用します。Lakebase でサポートされている別のプロバイダーは、外部ICUライブラリを使用するicuです。

Lakebase では、ロケール固有の並べ替えや大文字と小文字の変換が必要な場合に備えて、事前定義された一連の icu ロケールが提供されています。

  • すべての定義済みロケールを表示:
SQL
SELECT * FROM pg_collation;
  • 定義済みのicuロケールでデータベースを作成します。
SQL
CREATE DATABASE my_arabic_db
LOCALE_PROVIDER icu
icu_locale 'ar-x-icu'
template template0;
  • 個々の列のロケールを指定します。
SQL
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 Postgres (オートスケール Beta) ではサポートされていません。 ネイティブ Postgres レプリケーションを使用して Lakebase データベースとの間でデータをレプリケートすることはできません。

クライアントクエリのキャンセル

Postgresキャンセル プロトコルは、進行中のクエリのキャンセルには使用できません。

代わりに、新しい接続を作成し、 pg_cancel_backend(pid)を実行します。

SQL
SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND
query = '{The query you want to cancel}';

表領域

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

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