Replicated large objects
========================

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

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

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

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

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

bdr.lo\_*ファンクションの呼び出し
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

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

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

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

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

レプリケートされたラージオブジェクトは :ref:`bdr.pgd_largeobject <bdr.pgd_largeobject>`  に保存され、権限は
:ref:`bdr.pgd_largeobject_metadata <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ラージオブジェクトを表示しません。
