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ラージオブジェクトを表示しません。