[pgsql-jp: 31718] [Q] can't inport/export with ODBC from/to PostgreSQL with datetime

Takayasu Penkiya Iwanashi takayasu @ pooh3.a.perfect-liberty.or.jp
2003年 12月 6日 (土) 18:45:03 JST


岩梨と申します。
このたび、ODBC を使ってみて、不可解な症状に悩まされております。
是非、ご教授いただきたくお願いもうしあげます。


やりたい事:SQL Server のテーブルを Access で操作(テーブルをリンク、即、エクスポート)して
  テーブルを PostgreSQL へ移したい。

できたこと:PostgreSQL 7.0.2 on i386-unknown-freebsdelf4.1, compiled by gcc 2.95.2
  だと、SQL Server へリンクを張り、問題なくエクスポートできる。(約10 tables)

失敗した事:PostgreSQL 7.3.2 on i386-portbld-freebsd4.3, compiled by GCC 2.95.3
  には、エクスポートできる場合とできない場合がある。(日付/時刻型が含まれるとできない)

環境:
  ODBC側: windows98 + "Office Namiさんの PostgreSQL ODBC Driver 日本語版 ウェブサイト"  
          + access2000

  PostgreSQL : FreeBSD 4.3-RELEASE + PostgreSQL 7.3.2 (machine A)
               FreeBSD 4.1-RELEASE + PostgreSQL 7.0.2 (macnine B)

検証その1:
  SQL Server のテーブルをリンク。日付/時刻型を含むテーブルをエクスポートしてみる。
   ODBC--呼び出しが失敗しました。
   [Microsoft][ODBC Driver Manager]情報データ型が有効範囲にありません。(#0)
  と表示されます。この時、PostgreSQL の log には、  
    ERROR:  Type "datetime" does not exist 
  とでます。

検証その2:
  Access で作成した table addressbook
    (id オートナンバー 主キー, name text型, address text型, age 数値型)
  は問題なくエクスポートできる。-> A,B
  これと同じような、addressbook2
   (id オートナンバー 主キー, name text型, address text型, age 数値型,birth 日付/時刻型)
  を machine A へエクスポートしようとすると、-> A
   ODBC--呼び出しが失敗しました。
   [Microsoft][ODBC Driver Manager]情報データ型が有効範囲にありません。(#0)
  と表示されます。Posgreの方のlog は、
   ERROR:  Type "datetime" does not exist
  となります。
   machine B へは問題なくエクスポートできています。
   B =>     Table "addressbook2"
   Attribute |    Type     | Modifier 
  -----------+-------------+----------
   id        | integer     | 
   name      | varchar(50) | 
   adress    | varchar(50) | 
   age       | integer     | 
   birth     | timestamp   | 

検証その3:
  machine A で作成したテーブル
     CREATE TABLE a1( no serial, name varchar(20), birth date);
  をインポートする。
  手作業で (1,papa,1970/01/01)と入力。
  エクスポートする。検証1と同じエラーが、access と postgreSQL のログにでる。
  ちなみに、インポートした a1 は、( no 数値型, name テキスト型, birth 日付/時刻型)
  となっている。

検証その4:
  machine A で作成したテーブル
     CREATE TABLE a2( no serial, name varchar(20), birth timestamp);
  をインポートしてみると、
     ( no 数値型, name テキスト型, birth テキスト型)となってしまっている。

考察(推測?): ODBC が日付/時刻型を 7.0.2 へはちゃんと timestamp として渡せているのに、
  7.3.2 へは datetime として渡そうとして失敗している、、のでしょうかぁ?

とうざの解は、7.0.2 で pg_dump かな、と思っていますが、今後の事を考えると、悩ましいのです。
よろしくお願いもうしあげます。
-- 
Takayasu Penkiya Iwanashi



pgsql-jp メーリングリストの案内