PostgreSQL への接続(FireDAC)

提供: RAD Studio
移動先: 案内検索

データベース接続(FireDAC) への移動

このトピックでは、PostgreSQL への接続方法を説明します。

サポート対象バージョン

FireDAC ネイティブ ドライバでは、PG プロトコル 3.0 接続が必要なため、PostgreSQL Server および PostgreSQL Advanced Server バージョン 7.4 以降をサポートしています。

クライアント ソフトウェア

Windows 版クライアント ソフトウェア

FireDAC で PostgreSQL サーバーに接続するには、x86 または x64 クライアント ライブラリ LIBPQ.DLL が必要です。 libpq.dll を使用するには、「Microsoft Visual C++ 2010 Redistributable Package」もインストールされている必要があります。このパッケージは、http://www.microsoft.com/en-us/download/details.aspx?id=8328 から取得することができます。 理想的には、libpq.dll のバージョンはサーバーのバージョンと同じでなければなりません。 バージョン 9.0 のクライアント ファイル一式は次のとおりです。

  • libpq.dll
  • ssleay32.dll
  • libeay32.dll
  • libintl-8.dll
  • libiconv-2.dll

これらのファイルは、サーバー(ダウンロードについてはこちらを参照)のインストール フォルダの Bin フォルダから取得して、以下の場所に置くことができます。

  • PATH 環境変数値に含まれているフォルダ
  • アプリケーションの EXE ファイルのフォルダ

代わりに、他のフォルダに必須ファイルを置き、それらのパスを FDDrivers.ini に指定しても構いません:

[PG]
VendorLib=<folder>\libpq.dll

PostgreSQL クライアント ライブラリが適切にインストールされていない場合は、接続を試みると、以下の例外が発生します。

[FireDAC][Phys][PGSQL]-314. Cannot load vendor library [LIBPQ.DLL]. The specified module could not be found. Check [LIBPQ.DLL], which is located in one of the PATH directories or in application EXE directory.

または、

The ordinal Nnn could not be located in the dynamic link library SSLEAY32.dll.

OS X クライアント ソフトウェア

FireDAC を使用するには、以下が必要です。

  • libpq.dylib - x86 クライアント ライブラリ

これは OS X に前もってインストールされていますが、別途インストールすることもできます(詳細はこちらを参照)。

iOS 版クライアント ソフトウェア

こちらの記事(詳細)で、iOS 用に libpq.dylib をビルドする方法が説明されています。

Embarcadero はこのソフトウェアのテストは行っておらず、お問い合わせも承っておりません。ご了承ください。

Linux 版クライアント ソフトウェア

PostgreSQL クライアント ライブラリをインストールするには:

  1. Ubuntu Server 16.04 LTS では、次を実行します:
    sudo apt-get install libpq5
    sudo ln -s /usr/lib/x86_64-linux-gnu/libpq.so.5 /usr/lib/x86_64-linux-gnu/libpq.so
    
  2. Red Hat Enterprise Linux 7 では、次を実行します:
    sudo yum install postgresql-libs
    sudo ln -s /usr/lib64/libpq.so.5 /usr/lib64/libpq.so
    

ドライバのリンク

ドライバをリンクするには、以下のいずれかを行います。

  • [ツール パレット]の[FireDAC Links]ページから、TFDPhysPgDriverLink コンポーネントをドロップします。
  • uses 句に FireDAC.Phys.PG ユニットを追加します。

追加のセットアップ

If an application is using the {TIMESTAMPDIFF(MONTH, ....)} escape function, then we recommend that you create 3 PostgreSQL functions with the following types of arguments:

  • DATE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE

関数テンプレートは以下のとおりです。

CREATE OR REPLACE FUNCTION MONTHS_BETWEEN (timestamp with time zone, timestamp with time zone) RETURNS integer AS
$body$
DECLARE
  mes INTEGER;
  mes1 INTEGER;
  ano INTEGER;
begin
  mes=extract(month from (age($1,$2)));
  ano=extract(year from (age($1,$2)));
  mes1=abs((ano*12) + mes);
  return mes1;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

接続定義パラメータ

PostgreSQL DBMS に接続するには、ほとんどのアプリケーションで、DriverID、Protocol、ServerDatabaseUser_NamePasswordCharacterSet を指定する必要があります(詳細については「接続の定義(FireDAC)」参照)。

DriverID=PG

パラメータ 説明 値の例
Pooled この接続定義の接続プールを有効にします。デフォルト値は False です。プールされた接続を使用するには、接続定義が persistent または private でなければなりません。. True
Database この接続の現在のデータベースの名前。 Database を指定しない場合、現在のデータベースはセットアップされません。 MyDB
User_Name PostgreSQL ユーザー ID。 postgres
Password PostgreSQL ユーザー パスワード。
MonitorBy この接続定義のトレース / モニタ出力を指定します。次の値のいずれかを指定することができます:
  • FlatFile: トーレス出力はテキスト ファイルに送信されます。これを有効にするには、アプリケーションで TFDMoniFlatFileClientLink をインクルードし、その Tracing プロパティを True に設定します。FireDAC は、アプリケーションが完了した後、トレース ファイルの名前を表示します。
  • Remote: トレース出力は、アプリケーションのモニタリングを支援するため、FDMonitor ユーティリティに送信されます。これを有効にするには、アプリケーションで TFDMoniRemoteClientLink をインクルードし、その Tracing プロパティを True に設定します。FDMonitor は、接続が確立される前に実行されなければなりません。
  • Custom: トレース出力は、TFDMoniCustomClientLink.OnOutput イベント ハンドラに送信されます。これを有効にするには、アプリケーションで TFDMoniCustomClientLink をインクルードし、その Tracing プロパティを True に設定します。
FlatFile
Server PostgreSQL サーバーが動作しているサーバーの TCP/IP アドレスまたはホスト名。 127.0.0.1
Port PostgreSQL サーバーがリスンしている TCP/IP ポート。 5432
LoginTimeout 接続の確立中にアプリケーションがタイムアウトするまでの時間(秒単位)を制御します。 30
CharacterSet この接続で使用するデフォルトの文字セット。 詳細については、PostgreSQL ドキュメントの「Character Set Support」(文字セット サポート)の章を参照してください。 WIN1251
ExtendedMetadata

クエリ結果セットの拡張記述を以下のように制御します。

  • True -- FireDAC では、考えられる列属性(NULL 値が許容されているかどうか、自動インクリメントするかどうか、どのドメインに属しているか、など)をすべて取得するように結果セットを記述します。 このオプションを True に設定すると、データセットが開くのが少し遅くなります。
  • False - クエリ列に関する制限された情報だけが使われます(デフォルト)。
False
OidAsBlob

テーブル内の OID 列の解釈を以下のように制御します。

  • No - OID 列は dtUInt32 列となります(符号なし整数値が格納されます)。
  • Yes - OID 列は dtHBlob 列となります(ラージ オブジェクト値が格納されます)。
  • Choose - クエリの結果、ディクショナリ テーブルからデータが取得されるか、LO、LargeObject、BLOB のいずれのドメインにも属さない列のデータが取得される場合、OID 列は dtUInt32 列となり、それ以外の場合は dtHBlob 列となります。列のドメインを取得するには、ExtendedMetadata オプションが True でなければなりません。
Yes
UnknownFormat

不明な PostgreSQL データ型の取り扱いを以下のように制御します。

  • Error -- "Cannot describe type"(型を記述できません)という例外が発生します(これがデフォルトです)。
  • BYTEA -- BLOB 値として表されます。
BYTEA
ArrayScanSample 制約された配列が ftArray または ftDataSet にマップされているかどうかを判断します。

この接続パラメータを指定するには、ArrayScanSample=<RowsToScan>[;<DefaultArraySize>] を使用します。

次のように実行します:

  • 指定された場合、FireDAC は PostgreSQL 配列型フィールドを分析して制約を取得し、ftArray として定義します。まず、FireDAC は <RowsToScan> 行をスキャンし、配列のサイズを取得します。すべての行に、NULL 値や配列フィールドに対する空配列がある場合、FireDAC は <DefaultArraySize> をデフォルトの配列サイズとして使用します。デフォルト値は [5] です。
  • そうでなければ、フィールドは ftDataSet として定義されます。これは、次の場合が含まれます:
    • ArrayScanSample が指定されていない(デフォルト)。
    • ArrayScanSample は指定されているが、<RowsToScan> が 0 である。
    • ArrayScanSample は指定されているば、評価された配列サイズが 0 である。
ApplicationName アプリケーションの名前。 これを指定した場合、その値は pg_stat_activity テーブルの application_name 列に格納されます。 AllBooks
PGAdvanced PostgreSQL サーバーの追加の接続オプション。 詳細については、PostgreSQL ドキュメントの「Database Connection Control Functions」(データベース接続制御関数)の章の「PQconnectdb」の段落を参照してください。 値の形式は、<オプション>=<値>[;...] です。
MetaDefSchema デフォルト スキーマ名です。 カタログ名が MetaDefSchema と同じ場合、設計時コードではオブジェクト名からカタログ名が省略されます。MetaDefSchema を設定しても、PostgreSQL セッションでの現在のスキーマ検索パスは変わりません。 デフォルト値は 'public' です。 MySchema
MetaCurSchema アプリケーションの現在のスキーマを指定します。指定されない場合、その値は DBMS から取得されます。アプリケーションがメタデータを要求し、スキーマ名を指定しない場合、FireDAC は暗黙的に現在のスキーマを使用します。MetaCurSchema が '*' の場合、スキーマ名はメタデータ パラメータから省略されます。 *
GUIDEndian GUID 値がクライアント上でどのように表現されるのかを定義します。デフォルト値は 'Little' です。 Big
FastFetchMode レコードの最適化目標を取得します:
  • Choose - FD に適切な最適化目標を選択させます。 これが、デフォルト値です。
  • Default - FD は何も最適化しません。 これが、変更前のモードです。
  • All - FD は常に結果セットのフェッチを最適化し、すべてのレコードの収集を完了させます。
  • First - FD は常に結果セットのフェッチを最適化し、最初のレコードの収集を完了させます。
すべて

使用例

  • ローカルに動作しデフォルト(5432)ポートをリスンしているサーバーに接続する場合:


DriverID=PG
Database=addemo
  • (デフォルト以外のポートをリスンし、文字データには Unicode を使用する)リモート サーバーに接続する場合:


DriverID=PG
Server=pgsrv
Port=5433
Database=addemo
CharacterSet=utf8
MetaDefSchema=MySchema
ExtendedMetadata=True

関連項目