Replicated large objects#

PGDは、

PostgreSQL large object interface をミラーするレプリケートされたラージオブジェクト実装を提供します。論理レプリケーションによってレプリケートされない標準のPostgreSQLラージオブジェクトとは異なり、 PGDラージオブジェクトは、クラスター内のすべてのノードに論理的にレプリケートされます。 gallocシーケンスを使用してオブジェクト識別子OIDが生成され、すべてのノードにわたって一意性が保証されます。

アプリケーションまたはドライバーがPostgreSQLラージオブジェクトインターフェイスに依存しており、すべてのノードにわたってそのデータをレプリケートする必要がある場合に、レプリケートされたラージオブジェクトを使用します。レプリケートされたラージオブジェクトは、既存のアプリケーションを既にラージオブジェクトを使用しているPGDに移行する場合、またはラージオブジェクトAPIを介してバイナリデータを管理するドライバーまたはORMを使用する場合に一般的に使用されます。

新しいアプリケーションの場合、BYTEA の方が簡単で、特別な構成は必要ありません。適切なアプローチを選択するためのガイダンスについては、 Preparing your application for PGD を参照してください。

レプリケートされたラージオブジェクトを使用する#

PGDは、レプリケートされたラージオブジェクトを操作する2つの方法を提供します。bdr.lo_* ファンクションを直接呼び出すか、透過的リダイレクトを有効にして既存のアプリケーションがコードを変更せずに動作するようにします。

bdr.lo_*ファンクションの呼び出し#

PGDは、bdr スキーマのすべてのPostgreSQLラージオブジェクトサーバーサイドファンクションと同等のものを公開します。たとえば、lo_create() の代わりにbdr.lo_create() 、lo_open() の代わりにbdr.lo_open() を公開します。完全なファンクションリファレンスについては、 Replicated large objects を参照してください。

PostgreSQLラージオブジェクト呼び出しのリダイレクト#

標準のPostgreSQL lo_ * ファンクションへの呼び出しを同等のbdr.lo_* に自動的にリダイレクトするようにbdr.override_large_objects = on を設定するため、既存のアプリケーションはコードを変更せずにレプリケートされたラージオブジェクトを使用します。

リダイレクトはSQLレベルの呼び出しに適用されます。 libpqベースのクライアントとドライバーは、 SQLをバイパスして、プロトコルレベルでラージオブジェクト呼び出しも発行します。これらもリダイレクトするには、 Postgresに直接接続するのではなく、 Connection Manager Authentication 読み取り/書き込みポートデフォルト6432に接続します。

大きなオブジェクトの保存方法#

レプリケートされたラージオブジェクトは bdr.pgd_largeobject に保存され、権限は bdr.pgd_largeobject_metadata に保存されます。これらのテーブルはpg_catalog.largeobject およびpg_catalog.largeobject_metadata と同じ目的を果たしますが、その内容はすべてのノードにレプリケートされます。

制限事項#

  • ALTER LARGE OBJECT はサポートされていません。

  • この機能を有効にする前に作成されたラージオブジェクトはpg_catalog.largeobject に保存され、 bdr.lo_* インターフェイスからアクセスできません。

  • psqlの\lo_list は、 pg_catalog.largeobject を直接読み取るため、PGDラージオブジェクトを表示しません。