Memo/SQLite

http://dexlab.net/pukiwiki/index.php?Memo%2FSQLite
 


SQLite

  • SQLite Home Page
  • SQLite - Wikipedia
    • SQLite はMySQLやPostgreSQLと同じデータベース管理システムであるが、サーバとしてではなくアプリケーションに組み込んで利用される軽量のデータベースである。 一般的なRDBMSに比べて大規模な仕事には不向きだが、中小規模ならば速度に遜色はない。 また、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。バージョン3.3.8からは全文検索のFTS1モジュールがサポートされた。

バックアップ/リストア

  • .dump: SQLファイルを出力
    1. sqlite3 mydb.db .dump | gzip > mydb.$(date '+%w').gz
  • import: SQLファイルを入力して新しいDBを作る
    1. zcat mydb.$(date '+%w').gz | sqlite3 mydb.db
  • .backup: バイナリ形式のファイルのままコピーを取る
    • cpコマンドだとファイルが破損するので注意。
    • すぐロックするため「Error: database is locked」がよく出る。「.timeout 1000」で緩和できる
      1. sqlite3 mydb.db ".backup mydb.$(date '+%w').db"
      2.  
      3. # オプションを追加して実行したい時。例:1秒待つ
      4. echo -e ".timeout 1000\n.backup mydb.$(date '+%w').db" | sqlite3 mydb.db
  • .restore: .backupで作成したDBファイルから戻す
    1. sqlite3 mydb.db ".restore mydb.$(date '+%w').db"

最適化

  • データを削除しても、通常DBBファイルサイズは小さくならない。また更新が多いと段々遅くなる。定期的にvacuumすると良い
    1. sqlite3 trac.db vacuum
    2. sqlite3 trac.db reindex

異なるDB間でのテーブルコピー

  1. sqlite3 new.db
  2. sqlite> ATTACH DATABASE 'old.db' AS old;
  3. sqlite> .databases
  4. seq  name             file
  5. ---  ---------------  ----------------------------------------------------------
  6. 0    main             /tmp/new.db
  7. 2    old              /tmp/old.db
  8.  
  9. sqlite> BEGIN;
  10. sqlite> INSERT INTO main.table1(c1,c2,c3) SELECT c1,c2,c3 FROM old.table1;
  11. sqlite> COMMIT;
  12. sqlite> DETACH DATABASE old;

CentOS5.xでpecl sqliteのインストール

  • 通常のインストールではエラーが出てインストールできない
    1. pecl install sqlite
    2.  
    3. running: phpize
    4. Cannot find config.m4.
    5. Make sure that you run '/usr/bin/phpize' in the top level source directory of the module
    6.  
    7. ERROR: `phpize' failed
  • 元のソースを変更する事でインストールできる。
    • filesqlite.c.1.03.patch
      1. cd /tmp
      2. wget http://pecl.php.net/get/SQLite-1.0.3.tgz
      3. tar xzf SQLite-1.0.3.tgz
      4. cd SQLite-1.0.3
      5. phpize
      6. ./configure
      7.  
      8. patch < sqlite.c.1.03.patch
      9.  
      10. make
      11. make install
      12.  
      13. cat > /etc/php.d/sqlite.ini << EOS
      14. extension=sqlite.so
      15. EOS
      16.  
      17. service httpd restart
      18.  
      19. 確認
      20. php -m | grep sqlite                                            
      21. pdo_sqlite
      22. sqlite

複数のDBを連結して使用

  • dbファイル名に'.'が入っている場合は「'」「"」で囲む必要がある
    1. sqlite3 foo.db
    2.  
    3. sqlite> CREATE TABLE item (id int, name text);
    4. sqlite> .TABLES
    5. item
    6. sqlite> INSERT INTO item VALUES (1, 'item1');
    7. sqlite> INSERT INTO item VALUES (2, 'item1');
    8. sqlite> .exit
    9.  
    10. ----
    11. sqlite3 bar.db
    12.  
    13. sqlite> CREATE TABLE item (id int, name text);
    14. sqlite> .TABLES
    15. item
    16. sqlite> INSERT INTO item VALUES (3, 'item3');
    17. sqlite> INSERT INTO item VALUES (4, 'item4');
    18.  
    19. ----
    20. sqlite> attach 'foo.db' AS foo;
    21. sqlite> attach 'bar.db' AS bar;
    22. sqlite> SELECT * FROM foo.item UNION ALL SELECT * FROM bar.item;
    23. 1|item1
    24. 2|item2
    25. 3|item3
    26. 4|item4
    27. sqlite> detach bar;
    28. sqlite> detach foo;

ツール


コメントはありません。 コメント/Memo/SQLite?

お名前: 「かくにん」を漢字で入力して下さい。1文字目が「たしかめる」で2文字目が「みとめる」です。

添付ファイル: filesqlite.c.1.03.patch 632件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-14 (火) 13:06:46 (223d)