PostgreSQL への接続(FireDAC)
データベース接続(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 クライアント ライブラリが適切にインストールされていない場合は、接続を試みると、以下の例外が発生します。
または、
OS X クライアント ソフトウェア
FireDAC を使用するには、以下が必要です。
- libpq.dylib - x86 クライアント ライブラリ
これは OS X に前もってインストールされていますが、別途インストールすることもできます(詳細はこちらを参照)。
iOS 版クライアント ソフトウェア
こちらの記事(詳細)で、iOS 用に libpq.dylib をビルドする方法が説明されています。
Embarcadero はこのソフトウェアのテストは行っておらず、お問い合わせも承っておりません。ご了承ください。
Linux 版クライアント ソフトウェア
PostgreSQL クライアント ライブラリをインストールするには:
-
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
-
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、Server、Database、User_Name、Password、CharacterSet を指定する必要があります(詳細については「接続の定義(FireDAC)」参照)。
DriverID=PG
パラメータ | 説明 | 値の例 |
---|---|---|
Pooled | この接続定義の接続プールを有効にします。デフォルト値は False です。プールされた接続を使用するには、接続定義が persistent または private でなければなりません。. | True |
Database | この接続の現在のデータベースの名前。 Database を指定しない場合、現在のデータベースはセットアップされません。 | MyDB |
User_Name | PostgreSQL ユーザー ID。 | postgres |
Password | PostgreSQL ユーザー パスワード。 | |
MonitorBy | この接続定義のトレース / モニタ出力を指定します。次の値のいずれかを指定することができます:
|
FlatFile |
Server | PostgreSQL サーバーが動作しているサーバーの TCP/IP アドレスまたはホスト名。 | 127.0.0.1 |
Port | PostgreSQL サーバーがリスンしている TCP/IP ポート。 | 5432 |
LoginTimeout | 接続の確立中にアプリケーションがタイムアウトするまでの時間(秒単位)を制御します。 | 30 |
CharacterSet | この接続で使用するデフォルトの文字セット。 詳細については、PostgreSQL ドキュメントの「Character Set Support」(文字セット サポート)の章を参照してください。 | WIN1251 |
ExtendedMetadata |
クエリ結果セットの拡張記述を以下のように制御します。
|
False |
OidAsBlob |
テーブル内の OID 列の解釈を以下のように制御します。
|
Yes |
UnknownFormat |
不明な PostgreSQL データ型の取り扱いを以下のように制御します。
|
BYTEA |
ArrayScanSample | 制約された配列が ftArray または ftDataSet にマップされているかどうかを判断します。
この接続パラメータを指定するには、ArrayScanSample=<RowsToScan>[;<DefaultArraySize>] を使用します。 次のように実行します:
|
|
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 | レコードの最適化目標を取得します:
|
すべて |
使用例
- ローカルに動作しデフォルト(5432)ポートをリスンしているサーバーに接続する場合:
DriverID=PG Database=addemo
- (デフォルト以外のポートをリスンし、文字データには Unicode を使用する)リモート サーバーに接続する場合:
DriverID=PG Server=pgsrv Port=5433 Database=addemo CharacterSet=utf8 MetaDefSchema=MySchema ExtendedMetadata=True