ACCESS -> PostgreSQL移行ツールの制限事項


・対応していない型

レプリケーション(GUID)型、OLE オブジェクト型、ハイパーリンク型。

・十進型の小数点以下桁数が変換できない。

DAOでは十進型の小数点以下桁数が取得する方法がわからないため、この部分だけADOXで取得しています。(1.0.1)

・postgresで識別子に使えない名前も通してしまう。

ACCESSの識別子をLCase関数で小文字化する以外の措置をしていませんので、postgresqlで識別子に使えない名前のテーブル名や列名がテーブル定義SQL文に出力される可能性があります。

気合のある人は、VBScript.RegExpでも使ってCPostgresConverterクラスのCheckIdentifier()を改造してください。

・CHECK制約と既定値に無効な式が入る可能性がある。

ACCESSのFieldオブジェクトのvalidationRuleプロパティとdefaultValueプロパティの内容をほぼそのままCHECK制約、DEFAULTに持ってきているので、>0のようなごく単純な式以外は、無効な式になっている可能性が高いです。

もっときっちりと変換したい人は、CPostgresConverterクラスのGetpgDefault()とGetpgCheck()を改造してください。

・オートナンバーがintegerになる。

serialに変換します。(1.0.4)
setval()でSEQUENCEをオートナンバー型フィールドの最大値+1に設定する文を出力します。

素直にinteger型に変換したい場合は、CPostgresConverterクラスのGetpgFieldType()の該当部分を修正します。

・日付時刻型がtimestamp型になる。

ACCESSに日付型、時刻型がないので、date型、time型が適切な列でも下記のルールでdate型かtime型に割り当てられなければtimestamp型になります。

(日付時刻型・型変換ルール) (1.0.1)

日付時刻型の型変換ルールを変更したい場合は、CPostgresConverterクラスのGetpgFieldTypeの該当部分を修正します。

※レコードの更新日時列を他者変更の確認に使う用途を考えると、VBAで扱えないtimestampよりもtimestamp(0)に変換するのが正解にも思える。


TOPに戻る