「あなくつ」のおもちゃばこ

Blog

PostgreSQLのデータをMySQLへインポートする自分用メモ

PostgreSQLで運用していたデータをMySQLへ移行する必要が出てきてしまったので、少しでもラクに移行できないか考えてみた。

前提条件として

  • データ型は基本の型ばかり (INT/DOUBLE/CHAR/TEXTなど。DATETIMEなども使っていない)
  • 関数・変数は使わない (SERIAL(AUTO_INCREMENT)だけ)

というテーブル構成。

  1. まずダンプファイルを作る

    pg_dump --inserts --column-inserts -f /tmp/psql.sql [DB名]

  2. SQLファイル先頭のSETコマンドを削除

  3. ALTER TABLE [テーブル名] OWNER TO [ユーザー名] を削除

  4. CREATE SEQUENCE・・・ を削除

  5. ALTER SEQUENCE・・・ を削除

  6. ALTER TABLE ONLY・・・ を削除

  7. テーブル定義を置換

    • CHARACTER > CHAR (型の読み替え)
    • REAL > FLOAT (型の読み替え)
    • DOUBLE PRECISION > DOUBLE (型の読み替え)
    • TEXT DEFAULT ''::text > TEXT (TEXT型にデフォルト値を設定できない)
    • ''::bpchar > '' (デフォルト値の型明示を削除)
  8. データを置換

    • (\s+)' > ' (CHAR型だったカラムはパディングのスペース文字が入っているので削除。データ内のスペースを削除しないように注意)
  9. SERIAL型だったカラムに AUTO_INCREMENT 属性を付与

  10. 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;

  11. あとはエラーが出なくなるまでガンバレ!

タグ : MySQL,PostgreSQL,インポート,ダンプ

2015/08/24 16:23:44 | Trackbacks (0) | Comments (0) | Technology

FreePascalでクロスコンパイル (再来)

いやぁ結局Linuxはダメだったんだけどね。書いておかないと忘れちゃうので。

FreePascalでクロスコンパイル (再来)」の続きを読む

タグ : 32bit,64bit,FreePascal,Lazarus,Linux,クロスコンパイル

2010/07/26 05:45:52 | Trackbacks (0) | Comments (0) | Technology

Delphiについていろいろ考え中

最近は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

CentOS5でLazarusを動かす時

Indyなどの静的リンクのコンポーネントをインストールするときLazarusの再構築が必要になりますが、そのときにいくつかライブラリが必要だったのでメモ。

  • libX11-devel
  • gdk-pixbuf-devel
  • gtk2-devel

全部yumで入るからかんたんだね!

タグ : CentOS,Indy,Lazarus

2009/10/24 02:32:21 | Trackbacks (0) | Comments (0) | Technology

FreePascalがMySQLでLIMITするとき

MySQLはSELECT文にLIMITが入っていればどんな時も結果件数を制御できた気がするんだが。例えばこんなSQL文は実行できるはず。

SELECT user_name WHERE user LIMIT 5

この文をphpMyAdminから発行してもちゃんと結果が返ってくるのに、FreePascalからデータベースドライバ経由でこれを発行しても結果が返ってこない。ってかエラーをRaisすらしない。こういう場合はどうするか。

SELECT user_name WHERE user ORDER BY user_id LIMIT 5

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

今日はFreePascalからMySQLへの接続をがんばってみた。

MySQLへの接続は、データベースドライバをラッピングしているコンポーネントがLazarusに付属しているので、それを利用することにする。簡単な使用方法は公式Wikiに載っているので、それ通りに実装すれば最低限は動作する。以下は若干気をつけなければいけない点。

  • 現在サポートされているのはMySQL 5.0.x。現状最新の5.1.xは接続してくれない。
  • 実行ファイルと同じディレクトリに(パスが通っているディレクトリもOKかも)libmysql.dll(Linux系ではlibmysql.soかな)をコピー
  • 日本人ならSET NAMESをしないと文字化けする。

とりあえず昨日のExtPascalと今日のMySQLを組み合わせてExtJS-FreePascal-MySQLがつながった。あとはプログラムを組んでいくだけだが、この先は世界的に見ても明らかに資料が少ない...。

と、とりあえずここまでやって、夜28時から作業し始めて(←そもそもこれが大間違い)朝が来た。

タグ : ExtJS,ExtPascal,FreePascal,Lazarus,MySQL

2009/10/05 06:10:05 | Trackbacks (0) | Comments (0) | Technology

FreePascal + MySQL

今日はFreePascalからMySQLへの接続をがんばってみた。

MySQLへの接続は、データベースドライバをラッピングしているコンポーネントがLazarusに付属しているので、それを利用することにする。簡単な使用方法は公式Wikiに載っているので、それ通りに実装すれば最低限は動作する。以下は若干気をつけなければいけない点。

  • 現在サポートされているのはMySQL 5.0.x。現状最新の5.1.xは接続してくれない。
  • 実行ファイルと同じディレクトリに(パスが通っているディレクトリもOKかも)libmysql.dll(Linux系ではlibmysql.soかな)をコピー
  • 日本人ならSET NAMESをしないと文字化けする。

とりあえず昨日のExtPascalと今日のMySQLを組み合わせてExtJS-FreePascal-MySQLがつながった。あとはプログラムを組んでいくだけだが、この先は世界的に見ても明らかに資料が少ない...。

と、とりあえずここまでやって、夜28時から作業し始めて(←そもそもこれが大間違い)朝が来た。

タグ : ExtJS,ExtPascal,FreePascal,Lazarus,MySQL

2009/10/05 06:10:05 | Trackbacks (0) | Comments (0) | Technology

  • Top
  • Software
  • Blog
  • Laboratory
  • Profile
Search
Feeds of Blog
Archives

Copyright © 2004-2024 Ana-Kutsu All Rights Reserved.