トップページ»3.IT関連»PostgreSQL 8とMS Accessの問題

3.IT関連



PostgreSQL 8とMS Accessの問題

某ウェブシステムで使用しているPostgreSQLを最新の8系にマイグレーションすることになった。 とりあえず移行自体はそれほど手間がかかることもなく終わらせることができたのだが、Microsoft AccessでのODBCによる接続でおおはまり。

本家のPostgreSQLパッケージ(Windows版)に同梱されるODBCドライバをインストール後、テーブルのリンクをしてみる。 ここまでは問題なくリンクできて、尚且つテーブルの中身も閲覧できる。

ところがカラム中のデータを変更しようとしたりすると以下のエラーとなる。

他のユーザーが同じデータに対して同時に変更を試みているので、プロセスが停止しました。



他にこのテーブルを使っているユーザーはいない状態にしているので、このエラーはありえない。 もし排他に引っかかっているとしたら自分自身だ。

データの入れ直しやらODBCの接続パラメーターの変更やらあれこれ試してみたが全く改善しない。

最終的に見つけたのがこのページ。

psqlODBC FAQ
http://psqlodbc.projects.postgresql.org/faq.html

ここの、

6.4) Why do I get 'Write Conflict - This record has been changed by another user since you started editing it' in Access 2000 and above?

中のContributed by Sam Hokin (sam@ims.net) の部分。

The new PostgreSQL timestamp data type defaults to microsecond precision. This means that timestamp values are stored like 2002-05-22 09:00:00.123456-05. However, Access does not support the extra precision, so the value that Access uses is 2002-05-22 09:00:00-05. When one tries to update a record, one gets the error message above because the value that Access uses in its UPDATE query does not match the value in the PostgreSQL table, similar to the NULL vs. empty string conflict that is already reported in this FAQ entry.

これが原因でした。 つまりタイムスタンプ型のミリセカンドの部分をAccessがサポートしていないことによる問題らしい。 こりゃわからんて。

対策は、timestampをtimestamp(0)に変更すればいいらしい。 というわけで、

ALTER TABLE target_table ALTER target_column TYPE timestamp(0);

これをtimestamp使っているカラム全てに適用。

2007-07-27追記:
ちなみにWindows用PostgreSQL 7 or 8 ODBCドライバがおいてある場所のメモ。(今日現在)

http://www.postgresql.org/ftp/odbc/versions/msi/

2007-08-03追記:
PostgreSQLって8になって速くなりましたね。 体感的にですが、7の時より大分速くなってます。 ウチのサーバーもハードウェア入れ替えるタイミングで8に移行しようっと。


投稿日 : 2007年7月25日

この記事に関する言及

このエントリーのトラックバックURL:
http://akionweb.com/mt-tb.cgi/385

コメント

このページに対する感想、意見をお寄せ下さい。




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

おことわり

当サイトに掲載している全ての情報は、全て当サイト管理者が個人的、実験的に試した事、又は独自に調査したものです。 従ってその情報に誤りがある可能性も多分にあります。 当サイトの情報をそのまま鵜呑みにされませんようお願い申し上げます。 また当サイトの情報を元に作業されたりする場合はそれをご理解頂いた上で、あくまで自己責任の元で行ってください。

トップページ»3.IT関連»PostgreSQL 8とMS Accessの問題