PostgreSQLで運用していたデータをMySQLへ移行する必要が出てきてしまったので、少しでもラクに移行できないか考えてみた。
前提条件として
というテーブル構成。
まずダンプファイルを作る
pg_dump --inserts --column-inserts -f /tmp/psql.sql [DB名]
SQLファイル先頭のSETコマンドを削除
ALTER TABLE [テーブル名] OWNER TO [ユーザー名] を削除
CREATE SEQUENCE・・・ を削除
ALTER SEQUENCE・・・ を削除
ALTER TABLE ONLY・・・ を削除
テーブル定義を置換
データを置換
SERIAL型だったカラムに AUTO_INCREMENT 属性を付与
SERIALの最大値を AUTO_INCREMENT の次の値へ変換 (テーブル名をうまく抜き出せるように正規表現を書いてね)
検索正規表現: SELECT pg_catalog.setval\('(.+)_[^_]+_id_seq', (\d+), true\);
置換正規表現: SET @num = \2+1; SET @sql=CONCAT('ALTER TABLE \1 AUTO_INCREMENT=',@num); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
あとはエラーが出なくなるまでガンバレ!
タグ : MySQL,PostgreSQL,インポート,ダンプ
2015/08/24 16:23:44 | Trackbacks (0) | Comments (0) | Technology
いやぁ結局Linuxはダメだったんだけどね。書いておかないと忘れちゃうので。
「FreePascalでクロスコンパイル (再来)」の続きを読む
タグ : 32bit,64bit,FreePascal,Lazarus,Linux,クロスコンパイル
2010/07/26 05:45:52 | Trackbacks (0) | Comments (0) | Technology
最近はLazarus使ってFreePascalでプログラム書いているのだけれど、せっかくクラスとか書いたら公開したいなぁと思うわけです。ところで、時代はDelphi 2010なわけで、Delphiで扱う文字列がUnicodeになっているわけです。そこで気にしたいのは、バイト単位で文字列を操作する部分はUnicodeとAnsiどちらでも動くようにするということ。
まぁぶっちゃけるとMIMEの処理を行いたいわけだけど、ISO-2022-JPの文字列をstringに突っ込むとどうなるんだろうとか、Base64のエンコード・デコードをしたときにデータを格納すべき変数のデータ型は?とかが、いろいろ分からないのです。データを全部TStream系とかarra of Byteか何かで処理すれば気にしなくていいんだけれど、そうすると文字列検索なんかが面倒になる。ちなみにIndyとかはarray of ByteをTBytesとして宣言して使っているっぽい。
まぁこんな感じで悶々と考えたわけだけれど、結論としてDelphi 2009以降がないとわからん!ってことであきらめました。とりあえずstringはすべてAnsiStringとして考えておくことにします。
タグ : Base64,Delphi,FreePascal,Lazarus,MIME,Unicode
2009/11/05 03:21:01 | Trackbacks (0) | Comments (0) | Technology
Indyなどの静的リンクのコンポーネントをインストールするときLazarusの再構築が必要になりますが、そのときにいくつかライブラリが必要だったのでメモ。
全部yumで入るからかんたんだね!
2009/10/24 02:32:21 | Trackbacks (0) | Comments (0) | Technology
MySQLはSELECT文にLIMITが入っていればどんな時も結果件数を制御できた気がするんだが。例えばこんなSQL文は実行できるはず。
この文をphpMyAdminから発行してもちゃんと結果が返ってくるのに、FreePascalからデータベースドライバ経由でこれを発行しても結果が返ってこない。ってかエラーをRaisすらしない。こういう場合はどうするか。
ORDER BY句をつけなければいけないらしい。まぁ普通はLIMITを使うときは何らか並べ替えがあって、それを一定数取り出したいときだから特に問題になることでもない。しかしながら、並び順はなんでもいいから(普通はMySQLのデータ格納順)、とりあえず一定数取り出したいなんて時はそれが使えないことになる。
タグ : FreePascal,LIMIT,MySQL
2009/10/22 17:38:51 | Trackbacks (0) | Comments (0) | Technology
もう諦めて、ターゲットOSにLazarusインストールしちゃった。あぁ結構いいところまで行っていたと思うんだけどなぁ...。
FPCのライブラリで完結するプログラムなら前回の記事までの方法でコンパイル可能。デバッグをWindowsでやってLinux向けにコンパイルってことも可能なわけです。が、Lazarusのライブラリがうまくクロスコンパイルできないので、IndyやMySQLなどの便利なコンポーネントが使えないわけです。
コンパイル中にエラーが出るんだけれど、単純にリンクエラーとしか出ないから何のライブラリが足りなくてエラーになっているのかがわからん。コンパイラのメッセージを全部出力してみても、Linuxライブラリを読み込んでいるプログラムの内部でエラーが起こっているようで、具体的なエラーが分かんなかった。
とりあえず今回は納期があるので、クロスコンパイルはまた後日チャレンジしてみよう。本家のコミュニティー関係で質問でもしてみようか...。
タグ : FreePascal,Indy,Lazarus,MySQL,クロスコンパイル
2009/10/15 20:54:33 | Trackbacks (0) | Comments (0) | Technology
もう諦めて、ターゲットOSにLazarusインストールしちゃった。あぁ結構いいところまで行っていたと思うんだけどなぁ...。
FPCのライブラリで完結するプログラムなら前回の記事までの方法でコンパイル可能。デバッグをWindowsでやってLinux向けにコンパイルってことも可能なわけです。が、Lazarusのライブラリがうまくクロスコンパイルできないので、IndyやMySQLなどの便利なコンポーネントが使えないわけです。
コンパイル中にエラーが出るんだけれど、単純にリンクエラーとしか出ないから何のライブラリが足りなくてエラーになっているのかがわからん。コンパイラのメッセージを全部出力してみても、Linuxライブラリを読み込んでいるプログラムの内部でエラーが起こっているようで、具体的なエラーが分かんなかった。
とりあえず今回は納期があるので、クロスコンパイルはまた後日チャレンジしてみよう。本家のコミュニティー関係で質問でもしてみようか...。
タグ : FreePascal,Indy,Lazarus,MySQL,クロスコンパイル
2009/10/15 20:54:33 | Trackbacks (0) | Comments (0) | Technology
今日はFreePascalからMySQLへの接続をがんばってみた。
MySQLへの接続は、データベースドライバをラッピングしているコンポーネントがLazarusに付属しているので、それを利用することにする。簡単な使用方法は公式Wikiに載っているので、それ通りに実装すれば最低限は動作する。以下は若干気をつけなければいけない点。
とりあえず昨日のExtPascalと今日のMySQLを組み合わせてExtJS-FreePascal-MySQLがつながった。あとはプログラムを組んでいくだけだが、この先は世界的に見ても明らかに資料が少ない...。
と、とりあえずここまでやって、夜28時から作業し始めて(←そもそもこれが大間違い)朝が来た。
タグ : ExtJS,ExtPascal,FreePascal,Lazarus,MySQL
2009/10/05 06:10:05 | Trackbacks (0) | Comments (0) | Technology
今日はFreePascalからMySQLへの接続をがんばってみた。
MySQLへの接続は、データベースドライバをラッピングしているコンポーネントがLazarusに付属しているので、それを利用することにする。簡単な使用方法は公式Wikiに載っているので、それ通りに実装すれば最低限は動作する。以下は若干気をつけなければいけない点。
とりあえず昨日のExtPascalと今日のMySQLを組み合わせてExtJS-FreePascal-MySQLがつながった。あとはプログラムを組んでいくだけだが、この先は世界的に見ても明らかに資料が少ない...。
と、とりあえずここまでやって、夜28時から作業し始めて(←そもそもこれが大間違い)朝が来た。
タグ : ExtJS,ExtPascal,FreePascal,Lazarus,MySQL
2009/10/05 06:10:05 | Trackbacks (0) | Comments (0) | Technology