Hatena::ブログ(Diary)

arupaka-_-arupakaの日記

2016-02-13

sqlite3 のデータベースの復旧

http://taichino.com/engineer-life/database/4123

を参考に

insert 形式がで出力して、

その後、それを新しいデータベースインポートする。

(0)異常をチェック

sqlite> PRAGMA integrity_check

OKとかでるとOKで.

page xxxx とかでるとエラー

(1)insert形式で出力

sqlite> .mode insert

sqlite> .output tmp.sqlite3.sql

sqlite> .dump

(2)新しい方向に

sqlite3 new.sqlite3

.read dump_all.sql

(3)チェック

sqlite> PRAGMA integrity_check;

ok

2015-04-10

sqlite3をcygwinにインストール(使用できる列数をふやす)

sqlite3はVersion 3.8.9.

sqlite3は2000列しかデフォルトでは最大使えないので、

それを増やす。

エラーコード

`initialize': malformed database schema (TABLENAME) - too many columns on normalized_freq_time_series (SQLite3::CorruptException)


増やすためにはソースからのコンパイルが必要。

(1)ソースの取得

554 wget http://www.sqlite.org/2015/sqlite-autoconf-3080900.tar.gz

555 gzip -d http://www.sqlite.org/2015/sqlite-autoconf-3080900.tar.gz

556 gzip -d sqlite-autoconf-3080900.tar.gz

557 tar -xvf sqlite-autoconf-3080900.tar

558 cd sqlite*

559 ls

https://www.sqlite.org/limits.html#max_column

を参照するとSQLIETE_MAX_COLUMNという変数の設定をかえればいいらしいが、どこをかえていいのかわからない。

そこで、

find /. -type f -print | xargs grep MAX_COLUMN

と検索することで、sqlite3.c

8021

8022

8023 #ifndef SQLITE_MAX_COLUMN

8024 # define SQLITE_MAX_COLUMN 2000

8025 #endif

という部分を発見、マクロを変えればいいといことで、

./configureで

./configure CFLAGS='-DSQLITE_MAX_COLUMN=10000' CPPFLAGS='-DSQLITE_MAX_COLUMN=10000'

とすればよい.Dはマクロを臨時に指定できる.以下は10000列に設定を変えている.

CFLAGSはC言語コンパイルオプションを指定,CPPFLAGSはC++言語のコンパイルオプションを指定.

http://www.unixuser.org/~euske/doc/gccopts/

だめならこのオプション

./configure CFLAGS='-DSQLITE_MAX_COLUMN=10000' CPPFLAGS='-DSQLITE_MAX_COLUMN=10000' -disable-dynamic-extensions --enable-static --disable-shared

ログインなど

ここまでできれば

make clean

make

make install

でOK.


こういうエラーが出る場合は…

SQLite header and source version mismatch

2009-11-04 13:30:02 eb7a544fe49d1626bacecfe53ddc03fe082e3243

2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09

/usr/include/sqlite3.hを消して再びmakeすると動く模様

http://yoshikiito-el.hatenablog.com/entry/2014/11/24/121144 

ruby-sqlite3等は一度アンイントールしておく

LIBS = -lsqlite3 -lpthread -lrt -ldl -lcrypt -lm -lc

LIBS = -l/usr/local/sqlite3 -lpthread -lrt -ldl -lcrypt -lm -lc

ruby-sqlite3 は、

ldd sqlite3_native.so

として、

libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f2864f7e000)

なる.

ここで、usr/lib64/libsqlite3.so.0 をコンパイルしたものに置き換えると通る.

2015-02-27 [sql][sqlite3] sqlite3でレコードがなければ追加、あれば更新 UPSE

sqlite3でレコードがなければ追加、あれば更新 UPSERT

sqlite3でレコードがなければ追加、あれば更新 UPSERT

http://web-academia.org/it_business_web_development/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/482/

を参考にする.

  • SQLはREPLACE文を使う.
  • 使用するためにPrimary keyの設定が必要.

(1)primary keyがtableを作成

create table test_table(id text primary key, a data)

(2)これに対して,replace文

replace into test_table(id,val) values(2,4);

入っているかみる

select * from test_table;

出力例

2|4

(3−2)更新

replace into test_table(id,val) values(2,5);

更新されているか確認

select * from test_table;

出力例

2|5

(3−1)追加(新しいidをいれる)

replace into test_table(id,val) values(4,5);

追加されているか確認

select * from test_table;

出力例

2|5

4|5

2014-11-28

sqlite3で日付が列のデータの列の削除

基本的には,create table adj_count_data_new as select $str from adj_count_data

でテーブスを必要なところだけコピーする.

$strに行名をいれる

tmp.query

pragma table_info(adj_count_data);

tmp3.query

str=`cat tmp5`

echo "create table adj_count_data_new as select $str from adj_count_data;"

2539 sh tmp2.query > tmp3.query

2540 sqlite3 syoku.sqlite3 tmp3.query

2541 sqlite3 syoku.sqlite3 < tmp3.query

2542 sqlite3 syoku.sqlite3 < tmp3.query

2543 sqlite3 syoku.sqlite3 < tmp3.query

2544 vim tmp3.query

2545 sqlite3 syoku.sqlite3 < tmp3.query

2546 sqlite3 syoku.sqlite3

2547 vim tmp3.query

2548 sh tmp2.query > tmp3.query

2549 vim tmp2.query

2550 sqlite3 syoku.sqlite3 < tmp3.query

2551 sqlite3 syoku.sqlite3 < tmp3.query

2552 sh tmp2.query > tmp3.query

2553 sqlite3 syoku.sqlite3 < tmp3.query

2554 vim tmp3.query

2555 sqlite3 syoku.sqlite3 < tmp3.query

2556 vim tmp2.query

2557 sh tmp2.query > tmp3.query

2558 sqlite3 syoku.sqlite3 < tmp3.query

2559 vim tmp2.query

2560 sh tmp2.query > tmp3.query

2561 sqlite3 syoku.sqlite3 < tmp3.query

2562 vim tmp2.query

2563 sh tmp2.query > tmp3.query

2564 sqlite3 syoku.sqlite3 < tmp3.query

2565 vim tmp3.query

2566 sh tmp2.query > tmp3.query

2567 sh tmp2.query

2568 vim tmp2.query

2569* sh tmp2.quer

2570 sqlite3 syoku.sqlite3 < tmp3.query

2571 sqlite3 syoku.sqlite3

2572 history


http://stackoverflow.com/questions/2361921/select-into-statement-in-sqlite