| よくある質問と回答 |
PostgreSQL ODBC Driverとは?
PostgreSQL ODBC Driverとは、PostODBCを元に作成された、より高機能なODBCドライバです。実に多くの部分に改良の手を加えており、安定性や処理速度が抜群に良くなっているようです。また、PostODBCでサポートされていなかった多くの機能がサポートされており、より実用的になっています。
PostODBCからの改良点にはどういったものがありますか?
残念?ながら、たくさんあるので一言ではいえません。詳しくはオリジナルのPostgreSQL ODBC Driverのホームページをご覧になってください。いくつかピックアップしますと...
- より多くのODBC APIをサポートしています。ODBC APIレベルでのカーソル機能もサポートされました。
- フラットパスワード認証をサポートしています(PostODBC 日本語版ではサポートしていました)。
- PostgreSQLのGEQOオプティマイザを無効にできます。
- UNIQUE INDEX(PRIMARY KEY)を認識します(PostODBC 日本語版ではサポートしていました)。
- リードオンリーのデータソースを作成できます。
- オプションで、SELECT問い合わせを自動的にDECLARE CURSOR問い合わせに置き換えできます。
- ファイルDSNが使用できます(PostODBC 日本語版ではサポートしていました)。
- すべてのPostgreSQLデータ型が使用できます。
- 元となったPostODBCに含まれていた多くのバグが修正されています(PostODBC 日本語版ではほとんど修正されていました)。
- サーバがPostgreSQL version 6.4以上の場合に、KSQOオプティマイザが利用できます。MS-Access等で問題が出た場合に役に立つかも知れません。
- その他にも多くの改良が行われています。
データソースの設定項目にドライバオプションとデータソースオプションがありますが、それぞれどういう意味ですか?
ドライバオプションの設定内容は、PostgreSQL ODBC Driverを利用するすべてのデータソースで共有されます。つまり、データソースごとに異なる設定はできません。それに対して、データソースオプションの設定内容はそれぞれのデータソースごとに保存されます。
データソースの設定項目の[Read Only]が、ドライバオプション画面とデータソースオプション画面の2個所にありますが、どう違うのですか?
ドライバオプションの[Read Only]は、新規に作成するデータソースの初期値として利用されます。それに対してデータソースオプションの[Read Only]は、そのデータソース自体が更新可能かどうかを設定します。
PostgreSQLサーバに接続できません。
お使いのPostgreSQLサーバのバージョンが6.3以上である場合、postmasterの起動オプションに“-i”を指定してください。これを指定しないとpostmasterはTCP/IPによる接続を拒否してしまいます。
PostgreSQLサーバのホスト認証設定ファイル(data/pg_hba.conf)は正しく設定してありますか。この設定ファイルで他のホストからの接続を許可してあげてください。デフォルトのままでは他のホストからの接続は拒否されてしまいます。
テーブルの内容は正しく表示できるのですが、レコードの追加・更新ができません。
データソースオプションの[Read Only]をオフにしてください。
お使いのアプリケーションによっては、該当のテーブルに主キー(PRIMARY KEY)もしくはユニークインデックス(UNIQUE INDEX)が設置されていない場合、テーブルの更新ができない場合があります。
どうしても主キーを利用できないテーブルの場合には、データソースオプションの[OID Options/Show Column]と[OID Options/Fake Index]をともにオンにして、再度テーブルをリンクしなおしてください。こうすることによりPostgreSQL ODBC Driverは、PostgreSQLのシステムカラムであるoidカラムが主キーであるかのようにアプリケーションに見せかけてくれますので、更新が可能になります。ただし実際はoidカラムにインデックスはありませんので、レコード件数が多い場合には処理速度が遅くなります。なお、oidカラムにインデックスを作成することにより処理速度を改善できます。
上記の方法によりデータソースオプションの[OID Options/Show Column]をオンにすると、リンクされたテーブルにはoidというカラムが表示されるようになります。このカラムはPostgreSQLが自動的に作成するシステムカラムですので更新することはできません。
※oidカラム:重複しない整数が格納されたカラム。テーブルの作成時にPostgreSQLによって自動的に作成され、新規レコードの挿入時には値も自動的に設定される。なお、oidカラムはデフォルトでは表示されない。
レコードの追加・更新をしようとすると、アプリケーションの応答が無くなります。
ドライバオプションの[Use Declare/Fetch]をオフにしてください。このオプションは、データ量が膨大なテーブルを参照する場合にはパフォーマンス向上に効果的ですが、更新する場合には向きません。
PostgreSQLサーバがメモリを使い果たして異常終了してしまいます。
PostgreSQLサーバのオプティマイザの問題です。お使いのPostgreSQLサーバのバージョンに合わせて下記の通りに設定してください。
お使いのPostgreSQLサーバのバージョンが6.3.2以前の場合
ドライバオプションの[Disable Genetic Optimizer]をオンにしてください。
お使いのPostgreSQLサーバのバージョンが6.4以降の場合
ドライバオプションの[KSQO(Keyset Query Optimizer)]をオンにしてください。それでも改善されない場合には[Disable Genetic Optimizer]をオンにしてください。
MS-Access2000でPostgreSQLサーバにアクセスできません。
詳細な原因は不明ですが、おそらくMS-Access2000のバグだと思われます。なお、MS-Access97などの以前のバージョンで作成したMDBデータベースファイルをMS-Access2000用に変換した場合には正常にアクセスできます。MS-Access97などの以前のバージョンを持っていない場合には、とりあえずMS-Access2000でリンクテーブルを作成してからデータベース変換機能でいったん旧バージョンへ変換し、再度MS-Access2000用に変換(もしくはインポート)する方法があります。
追記: 1999/08/26版でこの問題に対応しました。ただし、PostgreSQLサーバのバージョンは6.4以降で、データソースオプションの[Protocol]を“6.4”に設定する必要があります。また、表示できなくなったリンクテーブルを表示できるようにするには、上記の設定で再度テーブルをリンクしなおすか、リンクテーブルマネージャでテーブル情報を更新する必要があります。
PostgreSQL 7.0 サーバに正しくアクセスできません。
現在のPostgreSQL ODBC Driver 日本語版では正しくアクセスすることはできません。なお、2000年4月2日にオリジナル英語版のPostgreSQL ODBC Driver 6.50.0000がリリースされてPostgreSQL 7.0に対応しましたが、このバージョンを元にした日本語版の作成はまだ完了していません。
追記: 2000/06/17版で、PostgreSQL 7.0サーバに対応しました。
日本語が化けるんですが。
ほとんどの場合、次のいずれかが原因です。
マルチバイト対応のPostgreSQLサーバを使っていない
PostgreSQLサーバをソースからインストールしたつもりでも、OSのディストリビューションに付属していたPostgreSQLサーバを起動している例を良く見ます。確認してください。
データベースの文字エンコーディングがEUC_JPになっていない
PostgreSQL ODBC Driver 日本語版のインストールに失敗している
日本語版をインストールし直してください。日本語版のコピー先ディレクトリはWindows 9x系とWindows NT系では異なります。注意してください。
MS-Accessで身に覚えのない「データの競合」が発生してしまいます。
色々と原因があるのですが、特に以下の点を確認してください。
- Microsoft Jet Database Engineには長さ0の文字列とNULLとを混同してしまうバグがあり、この問題が発生します。Microsoft Jet Database Engineを最新版にアップグレードしてください。マイクロソフトのウェブサイトからダウンロードできます。
- ODBCドライバオプションの“Bool as Char”オプションをオンにしてください。このオプションをオフにしているとPostgreSQLのbool型はODBCのBIT型に変換されるようになります、本来の機能としてはより望ましいのですが、MS-AccessではこのBIT型を正しく扱えないために問題が発生します。
- カラムのデータ型に浮動小数点数(実数)を使っていると発生することがあります。PostgreSQLでは浮動小数点数をサーバ・クライアント間で正確に転送することができません(厳密には誤差が発生することがあります)。このためMS-Accessは、知らないところでデータが勝手に変わったと判断してしまい、この問題が起きてしまいます。残念ながら決定的な対策はありません。
なお、ODBCドライバオプションの“Row Versioning”をオンにすると解決できるかもしれません。
MS-Accessで新規に追加した行が“#Deleted”と表示されてしまいます。
serial型のカラムやDEFAULT指定のあるカラムがあると発生することがあります。PostgreSQL ODBC DriverとMS-Access(正確にはMicrosoft Jet Database Engine)の仕組み上避けようのない現象ですので、あきらめてください。対策はありませんが、データは健全ですので安心してください。