だらだらやるよ。

こげつのIT技術メモ

アクセスからポスグレへデータベースの移行

ちょっと必要だったのでちょこちょこ調べてたら使えそうなソース発見!
http://ml.postgresql.jp/pipermail/pgsql-jp/2005-October/019707.html
これをちょっと改造してっと・・・以下のような感じになりました :-)
Accessに適当にフォームとボタン作成して、以下のようにVBAで記述してくださいな

リンクに書いてるとーりDAOの参照が必要です
postgreSQLODBCドライバは、DBインストールする際にドライバだけインストールするようにチェックつけれるのでそれで入れておくといいと思うます:-)

Dim DBS As DAO.Database
Dim TDF As DAO.TableDef
Dim Str_ODBC As String

    Str_ODBC = "" 'ODBCの接続文字列(先にODBCドライバの作成必要)

Set DBS = CurrentDb 

For Each TDF In DBS.TableDefs
        If Not Left(TDF.Name, 4) = "MSys" Then
            DoCmd.TransferDatabase acExport, _
                "ODBC", Str_ODBC, acTable, TDF.Name, TDF.Name, False
        End If
Next TDF

はまりポイントは以下

●プライマリキーの情報は移行されない
→おかげで更新とかできなくてはまったよ!!

●オートナンバーがただのintになってしまう
→こんな感じでシーケンスを作成する必要あり
→create sequence シーケンス名 start IDの最大値+1
→んで、オートナンバーのカラムの初期値に nextval('シーケンス名') と入力するっと
→ちなみにシリアル型にしてもアクセスからは見えませんよっと

●テーブルの項目名に大文字のアルファベット使ってると問題が・・・
CSEとかpgAdminとかでSQL発行しようとすると、アルファベットが小文字になってしまうんですね
なので、SQL打つときは項目名をダブルコーテーションで囲ってあげる必要があります。


うちとこの環境だとなぜか1テーブルだけ移行できなかった(しなくてもいいやつだったから結果的には問題なかったけど)