PostgreSQL ODBC Driver 7.03.0200に関する技術情報

このドキュメントは?

psqlODBC 7.03.0200についての技術情報が記述されています。

リリースされるドライバ

このリリースには、以下の3種類のドライバが含まれています

PostgreSQL

推奨のドライバです。ODBC 3.0 APIをサポートします。

PostgreSQL(Legacy)

ODBC 2.5 APIをサポートするドライバです。

PostgreSQL(Unicode Beta)

ODBC 3.0 APIとUnicode APIをサポートするドライバです。これのみベータ版の扱いになります。なお、ここでのUnicodeはPostgreSQL側のエンコーディング設定とは何の関係もありません。

インストールする方法

インストーラー版
インストーラーを起動し、指示に従うだけでインストールできます。
dll版
まず、アーカイブ中のdllをすべて%SystemRoot%\system32ディレクトリ(これは通常C:\WINDOWS\SYSTEM32になります。)に移し、その後にアーカイブ中のpsqlodbc.regファイルを実行してください。

オプション設定の解説。

設定1ダイアログ

設定名 説明
遺伝的最適化処理を無効にする 指定すると、遺伝的最適化処理を無効にします。大量のテーブルが関係する検索能率に影響があります。
一般ログ出力をする(C:\\psqlodbc.log) ログを出力します。出力により、パフォーマンスが低下します。
KSQO (クエリーキーセット最適化オプション) キーセット最適化を利用します。この最適化手法は、7.3以降ののPostgreSQLにはもう存在しません。
ユニ−クインデックスを使う。 ユニークインデックスをドライバで認識します。
ステ−トメントの構文解析を行なう ODBC側で必要なステートメント解析を行う。これにより実行前によりきめ細やかな情報を取得することが可能になります。ただし、同時にパフォーマンスもいくぶん低下します。
Declare〜Fetchを使用する select文を実行するとき、代わりにDECLARE CURSOR+FETCHで対応します。DBCカーソルライブラリを利用した接続で、大量のデータが入ったテーブルを取得すると非常に時間がかかるという 問題を改善するために使えますが、更新を伴う場合にしばしばハングアップする既知の問題があります
キャンセルにSQLFreeStmtを使用する(Exp) キャンセル時の内部処理に実験的なコードを利用します。
詳細ログ出力をする(C:\\mylog_xxxx.log) 詳細ログを出力します。出力はきわめて大量で、パフォーマンスが大幅に低下します。
未知のサイズ動作 - 最大をとる サイズが不明な型は、常に最大長であることにします。安定した動作が期待できます。
未知のサイズ動作 - 特定しない サイズが不明な型は、不明であるとします。アプリケーションが不明なサイズを扱える事が前提になります。
未知のサイズ動作 - 最長をとる サイズが不明な型は、結果の中で一番サイズが大きい物を返します。
textを長文字列として扱う text型の扱いを指定します。指定しない場合にはvarchar,した場合にはlongvarcharとします。
不明を長文字列として扱う ODBCで扱えない型の扱いを指定します。指定方法はtextの場合と同じです。
CharとしてBoolsを扱う bool型の扱いを指定します。offにすると、Accessでの取り扱いに問題が発生します。
キャッシュサイズ Declare〜Fetchを利用する場合のキャッシュサイズを指定します。
最大Varchar VARCHAR型の最大長を指定します。
最大LongVarChar LONGVARCHAR型の最大長を指定します
システムテーブルプレフィクス 'pg_'以外に、システムテーブルと見なしたいテーブルの接頭語を指定します。

設定2ダイアログ

設定名 説明
リ−ドオンリィ insert,update,delete文をドライバで拒絶します。しかし、select文と関数を使った更新などを通してしまいます。
バ−ジョン列表示 xminシステムカラムを強制的に表示し、その列のバージョンとして利用できるようにします。浮動小数点を利用したテーブルなどでODBCカーソルライブラリが誤った更新を検出することがあり、それを防ぐするために使います。
システムテ−ブルを表示 'pg_'及び、システムテーブルプレフィクスで指定した接頭語を持つテーブルを一覧で取得出来ないようにします。
Prepare情報取得に先行実行しない SQLPrepare()を実行したときに、情報を取得するための先行実行を取りやめ、別の方法を用います。SQLPrepare()したあとSQLExecute()しないアプリケーションとの互換性をとるために使います。
LF <-> CR/LF 変換を行う サーバー側LF <-> クライアント側 CR/LFの変換を行います。
-1 を真値(True)とする bool型のtrueを、定義通りの1ではなく-1として扱います。AccessのYES/NO型との互換性をとるために利用しますが、指定する事で通常のアプリケーションとの互換性が失われます。
更新可能カーソル ドライバで更新可能カーソルを利用可能にします。
サーバー側 Prepare(7.3以後) PREPARE/EXECUTE文を利用するようになります。これによりパフォーマンス改善が見込めますが、この機能は未だ実験的で様々な問題をはらんでいます。
Int8 の代替定義 - default INT8を、ODBC2.5ならvarchar,ODBC3.0ならbigintと認識します。
Int8 の代替定義 - bigint INT8を、(ODBC2.5には無い)bigintと認識します。
Int8 の代替定義 - numeric INT8を、numericと認識します。
Int8 の代替定義 - varchar INT8を、varcharと認識します。
Int8 の代替定義 - double INT8を、doubleと認識します。
Int8 の代替定義 - int4 INT8を、int4と認識します。
プロトコルバ−ジョン 6.2/6.3/6.4以降のいずれかを指定します
カラム列表示 OIDカラムを強制表示します。指定すると、OIDの無いテーブルを見られなくなる事に注意してください。
インデックスを装う OIDカラムにインデックスが存在するように見せかけます。プライマリーキーのないテーブルで、プライマリーキーと見なされるようになります。
接続時 設定 接続時に自動的に実行するSQL文を記述します

高度な設定 - 全体

一般ログ(&L) (C:\\psqlodbc_xxxx.log - コミュニケ−ションログ 接続文字列確定前に一般ログを出力します。
専用ログ (C:\\mylog_xxxx.log - 詳細デバッグ出力ログ) 接続文字列確定前に専用ログを出力します。

技術情報

利用可能な型

型名 ODBC型名 備考
CHAR SQL_CHAR 254文字まで
VARCHAR SQL_VARCHAR 254文字まで
NUMERIC SQL_NUMERIC
DECIMAL SQL_NUMERIC
int2 SQL_SMALLINT
int4 SQL_INTEGER
int8 SQL_VARCHAR ODBC2.5。ただしオプションで変更可能
int8 SQL_BIGINT ODBC3.0。ただしオプションで変更可能
float SQL_REAL
double SQL_FLOAT
text SQL_LONGVARCHAR text as longvarchar指定時。8190文字まで
text SQL_VARCHAR text as longvarchar指定なし。254文字まで
date SQL_(TYPE_)DATE
time SQL_(TYPE_)TIME
timestamp(0) SQL_TIMESTAMP timestampではないので注意
bytea SQL_VARBINARY 標準
bytea SQL_LONGVARBINARY byteaをloに指定した場合
lo SQL_LONGVARBINARY contrib/lo、あるいはリネームされたoidの両方とも
bool SQL_CHAR boolをchar型として扱う。'1'あるいは'0'
bool SQL_BOOL boolをchar型として扱う指定なし。1か0
bool SQL_BOOL さらにTrueを-1に指定。-1か0

接続文字列によるオプション指定法

通常の文字列を使う方法

文字列 説明
Description 説明
Servername サーバー名
Port ポート番号
Database データベース名
Username ユーザー名
Password パスワード
Debug デバッグ専用オプション
Fetch キャッシュ
ReadOnly リードオンリィ
CommLog psqlodbc.logの保存
Protocol プロトコルバージョン
Optimizer GEQOを無効にする
Ksqo KSQO
ConnSettings コネクション成功時に実行するSQL文
UniqueIndex ユニークインデックス
UnknownSizes 不明の最大値
CancelAsFreeStmt CancelをSQLFreeStmt
UseDeclareFetch> Declare/Fetchをつかう
TextAsLongVarchar Textを長文字型
UnknownsAsLongVarchar 不明を長文字型
BoolsAsChar CharとしてBoolを扱う
MaxVarcharSize Varcharの最大長
MaxLongVarcharSize 長文字型の最大長
FakeOidIndex OIDオプション - 偽のインデックス
ShowOidColumn< OIDオプション - 表示
RowVersioning 列のバージョン
ShowSystemTables システムテーブル表示
Parse ステートメントの構文解析
ExtraSysTablePrefixes システムテーブルのプレフィクス
DisallowPremature Prepareで先行実行しない
UpdatableCursors 更新可能カーソル
LFConversion CR-CRLFの相互変換
TrueIsMinus1 真値を-1として扱う
BI INT8の設定
ByteaAsLongVarBinary Byteaをloに
UseServerSidePrepare サーバ側Prepare
Debug 詳細ログ出力
Lie 実装してない物も含めて、あらゆるAPIをサポートするように振る舞います。これはダイアログから設定できません。
Socket ネットワークの内部的なバッファサイズを指定します。これはダイアログから指定できません。

短縮文字列を扱う方法

短縮文字列 対応するオプション
A6 接続文字列
A7 キャッシュサイズ
A8 ソケットのバッファサイズ
B0 Varchar最大長
B1 長文字列型の最大長
BI INT8の設定
C2 システムテーブルのプレフィクス
CX フラグ。最初の2バイトが後に続く設定ビット数(27)、その後がオプションをビットで示し、それを16進数化した物

フラグで指定するビットの詳細については、以下の通りです。

ビット番号 対応するオプション
1 CRLF-LF変換
2 更新可能カーソル
3 Prepareで先行実行しない
4 ユニークインデックス
5 6.3プロトコルである
6 6.4プロトコルである
7 不明なサイズは不明
8 不明なサイズは最大値
9 GEQOを無効
10 KSQO
11 psqlorbcの出力
12 デバッグ
13 ステートメントの構文解析
14 CancelにSQLFreeStmtを使う
15 Declare/Fetchを使う
16 リードオンリィ
17 textを長文字型
18 不明を長文字型
19 Charとしてboolを扱う
20 列のバージョン
21 システムテーブルの表示
22 OIDカラム表示
23 OIDカラムに偽のインデックス
24 真値を-1として扱う
25 byteaをlo
26 サーバ側Prepare
27 予約

API実装について

具体的な制限事項

問題のあるオプション設定

ラージオブジェクトの扱い

ラージオブジェクトを利用するためには、以下のような3種類の方法があります。