PostgreSQL への接続(FireDAC)

提供: Appmethod Topics
移動先: 案内検索

データベース接続(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.


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

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

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

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

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

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

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

ドライバのリンク

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

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

追加のセットアップ

アプリケーションでエスケープ関数 {TIMESTAMP(MONTH, ....)} を使用している場合は、以下の引数型を持つ 3 つの PostgreSQL 関数を作成することをお勧めします。

  • 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
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

関連項目