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.

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

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

  • libpq.so x64 クライアント ライブラリ

Linux 上にインストールするには、以下のコマンドを使用します。


sudo apt-get update
sudo apt-get install libpq-dev

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

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

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

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

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

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

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

ドライバのリンク

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

  • [ツール パレット]の[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

パラメータ 説明 値の例
Server PostgreSQL サーバーが動作しているサーバーの TCP/IP アドレスまたはホスト名。 127.0.0.1
Port PostgreSQL サーバーがリスンしている TCP/IP ポート。 5432
Database この接続の現在のデータベースの名前。 Database を指定しない場合、現在のデータベースはセットアップされません。 MyDB
User_Name PostgreSQL ユーザー ID。 postgres
Password PostgreSQL ユーザー パスワード。
CharacterSet この接続で使用するデフォルトの文字セット。 詳細については、PostgreSQL ドキュメントの「Character Set Support」(文字セット サポート)の章を参照してください。 WIN1251
LoginTimeout 接続の確立中にアプリケーションがタイムアウトするまでの時間(秒単位)を制御します。 30
ExtendedMetadata

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

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

使用例

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


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


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

関連項目