Sqlite
如何從命令行在 sqlite3 中指定超時?
我有幾個基本腳本,在填充我的 sqlite3 數據庫時會彈出一些資訊,但大約有一半的時間命令會立即失敗:
$ sqlite3 outgoing.db "select * from edges where worker is not null;" Error: database is locked $ sqlite3 outgoing.db "select * from edges where worker is not null;" Error: database is locked $ sqlite3 outgoing.db "select * from edges where worker is not null;" 1014->9000|1014|9000||-1.0|2 1014->9001|1014|9001||-1.0|2 ...
如果我添加
.timeout 1;
到命令的開頭,我只會得到一個語法錯誤;如何.
通過命令行以非互動方式傳遞 sqlite 特殊參數?
您可以使用初始化文件來執行此操作。
init.sql
(請注意,超時值以毫秒為單位 - 1 相當短):.timeout 1000
在提示下:
$ sqlite3 -init init.sql outgoing.db "select * from edges where worker is not null;" Loading resources from init.sql # 1 second pause Error: database is locked
使用一些 shell(至少在 Linux 上,不是很便攜),如果這是一個問題,您可以避免需要一個帶有程序替換的正確文件:
$ sqlite3 -init <(echo .timeout 1000) your.db "your sql;"
.output
如果將輸出重定向到文件或管道,或者如果您在 init 文件中指定了文件,則不會列印額外的輸出行(“從…載入資源”) 。