X



トップページDB@2ch掲示板
1002コメント312KB
SQLite Part.10
■ このスレッドは過去ログ倉庫に格納されています
0138NAME IS NULL
垢版 |
2013/02/18(月) 12:27:35.69ID:???
コントロールパネルか管理ツールでデータソース(ODBC)というのが
あるからそれで作ってやれば一応使えるよ。
ODBCの範囲内だけどな
0139NAME IS NULL
垢版 |
2013/02/24(日) 20:28:36.90ID:zXyOLTMR
最近興味があってsqliteを調べてるんですが、
みんなはやはりスマホのアプリ開発の為に利用してるんですか?
ざっと調べたところだと、複数のユーザからの頻繁な更新を受けるようなwebアプリの利用は厳しいという
情報を見つけたんだけど、古い情報なのでいまはどうなってるのかわかりません

やっぱりそういう用途では利用しづらいんでしょうか
それともなにか解決策が見つかったりしたんでしょうか
0140NAME IS NULL
垢版 |
2013/02/24(日) 21:36:06.19ID:???
今はジャーナルモードかえれば結構余裕
0141NAME IS NULL
垢版 |
2013/02/27(水) 13:05:20.84ID:???
sqlite3ってMySQLみたいに

use データベース名

ってできないの?
代替コマンドある?
0142NAME IS NULL
垢版 |
2013/02/27(水) 13:43:59.53ID:???
コマンドラインの話ね?
基本的に1ファイル1DBだから必要ないっしょ?

ただ、一度に複数のDBをつなげて違うスキーマとして同時に使うっていうような
面白いことならできる

$ sqlite3 test1.db
sqlite> .databases
seq name file
--- --------------- ----------------------------------------------------------
0 main /home/hoge/test1.db

sqlite> attach 'test2.db' as 'sub';

sqlite> .databases
seq name file
--- --------------- ----------------------------------------------------------
0 main /home/hoge/test1.db
2 sub /home/hoge/test2.db


sqlite> create table main.table1 (id text primary key, val integer);
sqlite> create table sub.table1 (id text primary key, val integer);
(mainは省略可、テーブル名は被らなければ省略可)

sqlite> insert into table1 (id, val) values (0, 123);
sqlite> insert into sub.table1 (id, val) values (123, 456);

sqlite> select t2.id, t2.val from table1 t1, sub.table1 t2 where t1.val = t2.id;
123|456

見たいな。
0143NAME IS NULL
垢版 |
2013/03/02(土) 13:28:15.59ID:???
globとlikeってどう使い分けるんでしょうか?
globの方が高機能だが速度はシンプルなlikeに劣るって認識であってますか?
0144NAME IS NULL
垢版 |
2013/03/03(日) 11:46:23.39ID:???
LIKEは標準、GLOBはSQLite拡張、でいいんじゃね
0145NAME IS NULL
垢版 |
2013/03/03(日) 19:03:49.41ID:???
phpから使ってるんだけど
PRIMARY KEY AUTOINCREMENTが定義されてるindexフィールドがあるテーブルlogがあります。
そこにinsert into log DEFAULT VALUES;をした場合
その時に作られたindexの番号を取得するにはどうしたらいいの?

即order by desc limit 1しても、その時に作られたと保証はされないですし
(同じタイミングで別プロセスに作成されたのかも知れない)
0146NAME IS NULL
垢版 |
2013/03/03(日) 19:17:53.28ID:???
last_insert_rowid() とか使えばいんでね?
0147NAME IS NULL
垢版 |
2013/03/03(日) 22:36:59.89ID:???
補足すると、トランザクションありの状態で、だよね
0148NAME IS NULL
垢版 |
2013/03/12(火) 10:01:39.94ID:???
PHPでPDOで使ってるんですが、トランザクションを開始してコミットする前に
webページを遷移させたからかどうかはわかりませんが、データベースがロックしたままになってしまいました。

PHPからデータベースがロックしているか確認してロックを解除する方法はありますか?

ネットで検索しまくりましたが、
「ロックしてるファイルをコピペしたファイルをデータベースとして使えばロックは解除される」
というのしか見つかりませんでした。
0149NAME IS NULL
垢版 |
2013/03/12(火) 18:08:32.14ID:???
PDOで使ったこと無いから知らないけど、普通はロックしてるプロセスが終了すれば解放される。
ロックしたまま無限ループしてるとかじゃない限り、そのうち解放されるんじゃない?
0150148
垢版 |
2013/03/12(火) 20:44:41.05ID:???
>>149

ループ処理はしてないです。
PC再起動してもそのファイルはロックされたままですね
0151NAME IS NULL
垢版 |
2013/03/12(火) 20:46:56.95ID:???
再起動してもロックって・・・
ロックファイルでも作ってるのかしら、もしくはなんかの間違い
0152NAME IS NULL
垢版 |
2013/03/12(火) 23:52:57.99ID:???
SQLite自体にロックファイルの概念はないぞ。
そもそも「データベースがロックされたままになった」というのは何を持って判断したの?
0153148
垢版 |
2013/03/13(水) 01:43:43.60ID:???
ロックされているファイルに対してトランザクションをかけて、executeすると
ロックされてるっていうエラーが出た。

とりあえずロックされたファイルをコピペしたファイルを今使ってるので問題はなくなったけど、
またいつこんなことが起こるのか心配…
0154148
垢版 |
2013/03/13(水) 01:53:29.16ID:???
このへんかな。
http://ja.softuses.com/28862
http://ult.riise.hiroshima-u.ac.jp/~nagato/?firefox

つまり firefox が起動中 lock しているこれらの sqlite ファイルが正常に解放される事無く、 firefox が落ちてしまった時に問題が発生するのではないかと。
(中略)

database is locked となる sqlite database file であるが、別の場所にコピーすると何事もなかったのように開くことができることに気付いた。
0155NAME IS NULL
垢版 |
2013/03/13(水) 18:43:14.14ID:???
ん、PDOの話じゃないの?

・OS、アーキテクチャ
・ファイルシステム
・使用法、再現コード

ぷりーず。
0156148
垢版 |
2013/03/14(木) 12:36:23.37ID:???
リンクは単にファイルがロックされた件に関する検索の情報です。
他にほとんどなかったので。

PDOかどうかって関係あるんですか…?

OSはwindows7
アーキテクチャとは?
ファイルシステムはNTFS
使用法はPHPでPDOでトランザクションしてプリペアでupdateをセットし、execute、コミットの順です。

コードは再現できるコード作れたらそれを載せます。
0157NAME IS NULL
垢版 |
2013/03/14(木) 12:46:18.34ID:???
アーキテクチャはIA(インテル)だろ
通常は fcntl でロックしてるようだから
ロック中に落ちたらコピーして仕切りなおし、でいいけど
Windowsはどうなんかな・・・
0158NAME IS NULL
垢版 |
2013/03/14(木) 18:29:01.45ID:???
原因を切り分けるためには情報が色々必要ってことでしょ。トラブル解析の基本。

例えばPDOでしか再現できない、とかだとするとPHPのSQLite用PDOドライバのバグなんて可能性もあるからね。
windowsだったら php_pdo_sqlite.dll ってやつ。phpはこのラッパーを経由してSQLiteのAPIを叩いてるわけ。

あとは(特にLinuxの)NFSはファイルロックまわりの実装が弱い、みたいなことがあったりして、
ファイルシステムによっては同様のことがあるかもしれないからファイルシステムの情報も必要、とか。

もちろんPHPスクリプト自体の作りが悪い可能性もあるから再現コードも必要。
>トランザクションしてプリペアでupdateをセットし、execute、コミット
とやってるつもりだったが、よく見たら違うこと書いてるとかね。
0159NAME IS NULL
垢版 |
2013/03/15(金) 13:01:49.99ID:???
unlocker入れておくと、ファイルがロックされてるときに、どのプロセスがそのファイルをロックしているか教えてくれる。
ロックされたプロセスからファイルを解放することもできる。
こういうプログラムがあるから、どのプロセスがロックしているのかをプログラムから知る方法はあるのだろうけど、
俺は知らない。
0164NAME IS NULL
垢版 |
2013/05/20(月) 22:39:47.94ID:???
AccessからODBC接続したんだけど、テーブルのデータを修正できません。なぜでしょうか?
0166NAME IS NULL
垢版 |
2013/06/05(水) 18:39:43.47ID:???
累計計算するのはどうやるの?
0167NAME IS NULL
垢版 |
2013/06/05(水) 18:50:39.26ID:???
累計計算って?
窓関数使いたいとか?
それともsqlite3_total_changesのこと?
0168NAME IS NULL
垢版 |
2013/06/05(水) 19:04:13.39ID:???
>>167
どうも済みません
学習の為に、PupSQLiteで出納帳作ってみたいのですが、残高が出来なくて困ってます
0171NAME IS NULL
垢版 |
2013/06/08(土) 10:15:26.55ID:???
トランザクションの end と comitt の違いは何ですか?
0174NAME IS NULL
垢版 |
2013/06/08(土) 12:04:21.70ID:???
PupSQLiteで、下記がエラーになります
エラーメッセージ 【cannnot start a transaction within a transaction】

-------------------------
BEGIN;
UPDATE test SET [Name]="太郎" WHERE [ID]=2;
END;
--------------------------

2行目を UPDATEでなく SELECT文にすると正しく実行されます

何が原因でしょうか?
0175NAME IS NULL
垢版 |
2013/06/08(土) 12:07:33.89ID:???
そのエラーメッセージに原因が書いてあるみたいだけど…
0176NAME IS NULL
垢版 |
2013/06/08(土) 12:13:32.11ID:???
もう少し詳しく教えて頂けませんでしょうか?
100万レコードのUPDATEをするのですが、SQLiteはトランザクションで挟まないと遅いと見聞きしたので、試しに1レコードでやってみたらエラーがでました

どうすれば目的が叶えられますでしょうか?
0177NAME IS NULL
垢版 |
2013/06/08(土) 12:26:31.81ID:???
>>176
>>174
>エラーメッセージ 【cannnot start a transaction within a transaction】
> 【cannnot start a transaction within a transaction】
>cannnot start a transaction within a transaction

c a n n n o t s t a r t a t r a n s a c t i o n w i t h i n a t r a n s a c t i o n
0178NAME IS NULL
垢版 |
2013/06/08(土) 12:34:32.16ID:???
もう少し詳しく教えて頂けませんでしょうか?
どうすれば目的が叶えられますでしょうか?
0179NAME IS NULL
垢版 |
2013/06/08(土) 12:49:41.39ID:???
>>176
まずはメッセージの意味がわかるかどうか
そこからだ
0180NAME IS NULL
垢版 |
2013/06/08(土) 13:04:31.90ID:???
意味は解ります

遅くないように明示的にトランザクションを掛けてUPDATEをするにはどうしたら良いでしょうか?
宜しくお願いします
0181NAME IS NULL
垢版 |
2013/06/08(土) 13:29:28.78ID:???
>>180
このUPDATEクエリは
既に別のトランザクションの中で動いているのだから
改めてトランザクションを作る必要はないのでは?
0182NAME IS NULL
垢版 |
2013/06/08(土) 13:46:46.02ID:???
>>181
有難うございます

> 既に別のトランザクション
これは、SQLiteがオートで行ってるトランザクションでしょうか?
それだと遅いと見聞きしていたものです

それともPupSQLiteが親切に勝手に行っているものでしょうか?

どちらと思われますでしょうか、ご意見をお聞かせくださいませ
0183NAME IS NULL
垢版 |
2013/06/08(土) 15:22:23.78ID:???
>>182
暗黙のトランザクションはBEGINを明示せずに
UPDATEなどをした場合に行われるから
この件には関係ないだろう
他にどこかでトランザクション開始を指示していて
それを終わらせていないとしか考えられないよ
0184NAME IS NULL
垢版 |
2013/06/08(土) 15:23:47.36ID:???
>>182
まず前提として、

1. SQLite(だけじゃないけど、auto commitがあるRDBMS)では明示的にトランザクションを開始せずに
  更新系のSQLを発行すると、自動的にその文の前後でbegin、commit相当の処理が動く。

2. そしてSQLiteの場合、サーバを持たないため、トランザクションが完了していると言うことは、
  HDD上のsqliteファイルに完全にデータが書き込まれていることを保証しなければいけない。

3. SQLiteがHDDへのデータの書き込みを完全に保証するためには、HDDのプラッタが2回転するのを待つ必要がある。
  一般的な7200rpmのHDDは1分に7200回転=1秒に120回転なので、1秒につき60回のトランザクションが限界(※)。
  ( 出典: http://www.sqlite.org/faq.html#q19 )
  ※実際にはデータの書き込みも行うので、それよりも少ないはず。

つまり、明示的にトランザクションを開始せずにUPDATE文を大量に発行すると、一回UPDATEするごとに
HDDへの書き込みを保証する必要が出る=HDD速度に引っ張られる、というのが、>>176がどこかで見聞きした
「SQLiteはトランザクションで挟まないと遅い」という怪しい話の正体。
# 余談だけど、そんなわけで同じSQLiteでもインメモリDBだと、そういうことにはならない。SSDとかでも大丈夫なんじゃないかな…?

その上で。

>>174のSQL文を見ると、BEGIN文をロック種別の指定なしで発行している。
ドキュメント(>>1)を見ると、指定無しの規定値はBEGIN DEFERREDだと書いてある。

SELECT文に変えると実行される理由はDEFERREDのドキュメントを参照してもらうとして、
UPDATEした時にエラーになった理由は>>174のエラーメッセージ通りなので、
考えられる原因としては、その3行の前に手動でbegin文を打っているけど忘れているか、
そのPupSQLiteとかいうツールが変なことをしているか。後者ならツールの作者に聞かないと分からん。
0185NAME IS NULL
垢版 |
2013/06/08(土) 15:38:27.65ID:???
>>183
>>184
> そのPupSQLiteとかいうツールが変なことをしているか。後者ならツールの作者に聞かないと分からん。

説明良く解りました
有難うございます
0186NAME IS NULL
垢版 |
2013/06/08(土) 19:42:57.07ID:???
そういう、よくわからないときは、本家のsqlite3.exeでSQL文を実行してみるのも手よ。
0187NAME IS NULL
垢版 |
2013/06/14(金) 05:21:43.10ID:i47DmT1C
iosやandroidアプリで、ドラッグ&ドロップでリストのレコードを入れ替えたタイミングで、テーブルに更新をかけ並び順を記憶させたいのですが、何かいい方法はないものでしょうか。
単純にリスト順にすべてのレコードに対してUPDATEをかけるのでは、件数が増えた場合コストがかかりすぎてしまいます。
0188NAME IS NULL
垢版 |
2013/06/14(金) 06:22:18.66ID:???
>>187
諦めろ
処理コストが問題となるような大量データの
更新を携帯端末にさせること自体に無理がある
0189NAME IS NULL
垢版 |
2013/06/14(金) 18:26:23.86ID:???
入れ替えた時はメモリ上で順番を記憶して
ビューを閉じたりする時にデータベースを書き換える
0190NAME IS NULL
垢版 |
2013/06/15(土) 16:24:54.32ID:???
>>187
完全な解決にはならないけど、並び順を連番にせず適度に空きを設けるとか。
…昔のBASIC言語思い出すな。
0191NAME IS NULL
垢版 |
2013/06/15(土) 18:26:19.32ID:???
>>187
一画面以上ドラッグするケースを捨てて、順序を数字で持てば
アップデート件数の最大値は表示件数になる。
0192NAME IS NULL
垢版 |
2013/06/15(土) 23:56:42.27ID:???
並び順(と元のテーブルへの外部キー)だけを保持するテーブルを別に作ればよいと思う。
参照するときはjoinしてorder by
0193NAME IS NULL
垢版 |
2013/06/16(日) 03:46:48.11ID:???
>>192
それで何が解決するのかわからない
0194NAME IS NULL
垢版 |
2013/06/16(日) 14:07:21.83ID:???
SQL Server Compact 4.0 と比べてどっちが良い?
0195NAME IS NULL
垢版 |
2013/06/16(日) 14:34:01.22ID:???
名前からしてCEに組み込めるかと思ったけど、そういうわけでもないみたいだなw
CE用にSQLiteのソース組み込んで使ってる・・・

ちょっと使ってみようかな
0196NAME IS NULL
垢版 |
2013/06/18(火) 08:48:33.46ID:bfvLnN3q
Winアプリで2つExeがある場合とかは、同時に接続できるのでしょうか?
片方がトランザクション開始したらコミットするまで、
もう片方がトランザクション開始出来ない、といった程度の問題でしょうか?
0197NAME IS NULL
垢版 |
2013/06/18(火) 19:09:59.34ID:???
自分で試すことも出来ないの?
0198NAME IS NULL
垢版 |
2013/06/18(火) 19:49:50.44ID:???
インスタンス別じゃん
0199NAME IS NULL
垢版 |
2013/06/19(水) 00:00:22.73ID:???
>>196
Journal_modeで挙動変えられるからそれぞれ試してみて使い方にマッチするのを見つけろ
0200NAME IS NULL
垢版 |
2013/07/17(水) NY:AN:NY.ANID:KY/vvdPC
拡張モジュールで、任意フォルダ内のファイル名、サイズ、タイムスタンプとかをテーブルのように参照出来るもの、ないですかねえ
0201NAME IS NULL
垢版 |
2013/07/19(金) NY:AN:NY.ANID:???
その説明じゃどんな仕様を想定しているのか分からん。
0202NAME IS NULL
垢版 |
2013/07/19(金) NY:AN:NY.ANID:???
SELECT path FROM C:\ WHERE size >= 1000000
みたいなことをしたいってことじゃないかと想像
0203NAME IS NULL
垢版 |
2013/07/19(金) NY:AN:NY.ANID:???
PowerShellにそんな感じのなかったっけ
0204NAME IS NULL
垢版 |
2013/07/20(土) NY:AN:NY.ANID:???
ディレクトリを走査して一覧表を作成している間にそのディレクトリの内容が
変わっちゃう場合があるし、それを止める手段もちょっと思いつかない。
こういうの、データベースの一機能として提供した場合に、なんか対処が面倒な
クレームとか来そう。
0205NAME IS NULL
垢版 |
2013/07/21(日) NY:AN:NY.ANID:???
>>200 ですが、やりたいのは>>202の通りです

VIRTUAL TABLEを自作してそれらしい物が出来ました。
公式リポジトリに最近外部モジュールのサンプルが沢山追加されていたのでそれベースに改造して。
>>204は考慮してない…
0206NAME IS NULL
垢版 |
2013/07/21(日) NY:AN:NY.ANID:???
PowerShellで良いじゃん
0207NAME IS NULL
垢版 |
2013/07/21(日) NY:AN:NY.ANID:???
sqliteのスレでその回答に何の意味が有るのかと
0208NAME IS NULL
垢版 |
2013/08/15(木) NY:AN:NY.ANID:???
System.Data.SQLite をVBAから直接(ADOではなく)使えますか?
0209NAME IS NULL
垢版 |
2013/08/15(木) NY:AN:NY.ANID:???
ホームページによればSystem.Data.SQLite is an ADO.NET adapter for SQLite。
そもそもADOじゃなくてADO.NET。"直接"が何を差すのかも分からず、
質問が理解できなかったので、熟考の上、再投稿をお願いします。
0210NAME IS NULL
垢版 |
2013/08/15(木) NY:AN:NY.ANID:???
知らんクセに偉そうに答えるなよw
0211NAME IS NULL
垢版 |
2013/08/15(木) NY:AN:NY.ANID:???
.netのdllもVBSやVBAから直接参照できるように書いてあるのも結構あるでしょ
暗号化やテキスト操作なんか
0212NAME IS NULL
垢版 |
2013/08/16(金) NY:AN:NY.ANID:???
やってみたけど参照できないよ
0213NAME IS NULL
垢版 |
2013/08/18(日) NY:AN:NY.ANID:???
どうやった?
もしかして別のものみてるかな?
0214NAME IS NULL
垢版 |
2013/08/19(月) NY:AN:NY.ANID:???
AccessのABEで参照設定して

Dim testDB
With System.Data.SQLite
set testDB=.createDatabase("SQLitetest.sq3")
.createTable testDB , "testTable"
end with
0217NAME IS NULL
垢版 |
2013/08/27(火) NY:AN:NY.ANID:???
mysqlのorder by fieldみたく、指定した順番にselectする方法はありませんか?

・テーブル例
mytable.myid
----------
1
2
3
4
5
・SQL例
select myid from mytable order by field myid(1,4,5,2,3);
・取得したいデータ
1,4,5,2,3の順番で取得できるように
0218NAME IS NULL
垢版 |
2013/08/27(火) NY:AN:NY.ANID:???
select myid from mytable order by case myid when 1 then 0 when 4 then 1 when 5 then 2 when 2 then 3 when 3 then 5 end;

長いけど…。偉い人ならもっとスマートにできるかもしれん。
0219NAME IS NULL
垢版 |
2013/08/28(水) NY:AN:NY.ANID:???
order by caseなんて初めて知りました。
ありがとうございます。
0220NAME IS NULL
垢版 |
2013/08/29(木) NY:AN:NY.ANID:???
●のログをひもづけるためにhttp://pastebin.com/pkEWvP2h
というスキーマをsqlite3で作ってデータをロードしてみましたが、
思ったようなスピードが出ません。どうすれば速くなりますか?

問い合わせは↓
SELECT DISTINCT s.email FROM res AS r
INNER JOIN thread AS t ON r.thread = t.rowid
INNER JOIN session AS s ON r.sess = s.rowid
WHERE t.board = '板名';
0222sage
垢版 |
2013/08/30(金) NY:AN:NY.ANID:???
すんませんCentOS5.9で、php-5.1.6からsqlite-3.3.6を使いたく、
yumでphp-pdoをインストールしたのですが、
Call to undefined function sqlite_open() となって使用できません。
phpinfo()ではpdoとpdo_sqliteが追加されているのですが、他に見るところありますでしょうか。
0223NAME IS NULL
垢版 |
2013/08/31(土) NY:AN:NY.ANID:???
windowsでsqliteデータベース開きたい時ってどんなソフト使ってる?
pupsqliteが異常終了多すぎて乗り換えたい
0224NAME IS NULL
垢版 |
2013/08/31(土) NY:AN:NY.ANID:???
>>222
そもそもsqlite3.soが入ってないとか

>>223
多すぎってほどか分からないけど、確かに時々落ちるね
なかなか、これぞってソフトがない…
0226NAME IS NULL
垢版 |
2013/08/31(土) NY:AN:NY.ANID:???
SQLiteSpy使うか、コマンドラインからsqlite3で操作するかだな
0227NAME IS NULL
垢版 |
2013/09/09(月) 23:20:54.16ID:???
俺はいろいろ試した結果あれ一択だわ
あれ、何だったっけか、えーとちょっと待ってて
0229NAME IS NULL
垢版 |
2013/09/10(火) 15:10:11.47ID:mn2EqLZS
PostgreSQL 9.3.0
0230NAME IS NULL
垢版 |
2013/09/14(土) 00:05:38.04ID:???
3.8.0.2来てた〜
ttp://www.sqlite.org/releaselog/3_8_0_2.html
0231NAME IS NULL
垢版 |
2013/09/14(土) 06:46:30.81ID:???
思いだした。
SQLite Expert
http://www.sqliteexpert.com
excel exportとか使わなければ無料版でも十分

navicatは高いし昔から好きじゃないんだよなー
0232NAME IS NULL
垢版 |
2013/09/14(土) 08:34:17.15ID:???
遅せーんだよボケ、もうNaviCat買っちゃったよ
0233NAME IS NULL
垢版 |
2013/09/15(日) 14:05:28.99ID:???
すまんのう、俺にも生活有るもんで
0234NAME IS NULL
垢版 |
2013/09/19(木) 04:36:24.30ID:???
チラ裏だけど
sqlite公式のドキュメントって実に良くまとまってるというか、読んでて関心するというか、尊敬さえする。

知りたい情報は探せばちゃんと載ってるし、それで居て機械的な説明に終始してない。読んでて疑問が浮かんだらその答えが次の行に載ってる。
ユーモア的な表現が所々出てくるのも面白い。
暇な時に用も無いのに読んじゃうくらい。

不満はSQL構文図から説明へのリンクが無いことぐらいかな
0235NAME IS NULL
垢版 |
2013/09/22(日) 18:21:34.80ID:???
MIPS の H/PC2000で使えるSQLlite 落ちてませんか
0236NAME IS NULL
垢版 |
2013/09/23(月) 05:49:51.57ID:???
ソースは落ちてるのでコンパイルしましょう
0237NAME IS NULL
垢版 |
2013/10/01(火) 23:29:16.52ID:???
INTEGERで作成したカラムに試しに文字列を入れてみたら普通に入りました
なんかALTER的なことをしないとだめなのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況