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

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が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

睡眠時間について

結局今朝の睡眠時間は2時間だった。まぁそれでよく1日活動できたものだ。しかしそうは言っても、非常に中身の薄いもったいない1日だったな。

社会の中でいろいろな人から話を聞くと、若いころは○時間しか寝てなかったという(もちろんある程度誇大化しているとは思うが)人がいるが、その睡眠時間でまともな1日を過ごしていたとは到底思えない。おそらく体を動かすのが仕事ならばそれでも何とかなると思うが、頭を使い考える仕事はそんな睡眠時間では良いものはできないだろう。

自分の経験から思うのは、柔軟な考え方ができる人ってのはそれなりに睡眠時間を取っているということ。よくプログラムは芸術だという人がいるけれど、芸術的なプログラムってのは一つの目的を達するためにそれを実現するあらゆる手法を多角的に考え、その中で一番良い手法をとれるたときにできたものではないかと思う。逆に納期に追われ寝不足の中で作られたシステムは、コードは汚くバグも発生するというのはだれもが納得しそうだ。つまり、僕の今の仕事をより美しく完成度の高いものにするためにはそれなりに睡眠時間が必要だろう。

僕は平均的に1日7~8時間の睡眠をとっている。寝る間も惜しんでがんばっている人たちに比べれば全く誇れることではないが、その代わり睡眠不足の人よりは柔軟で面白い考え方ができていると信じている。

結局言いたいのは、どちらの睡眠時間の取り方が良いということではなく、寝なければ成しえない仕事もあるのだから、寝る間も惜しんで働いた方がいいという意見はナンセンスじゃないだろうかということ。目いっぱい働く時もあれば、ゆったりゆとりを持って働く時もあるべきだねということ。

そんなわけで、今日はこのあたりで眠りにつこうかね。そして生活リズムを人並みに戻そう。

タグ : 生活リズム,睡眠時間

2009/10/05 22:51:56 | Trackbacks (0) | Comments (0) | Pastime

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.