2017-11-07 5 views
0

SQLiteスクリプトを実行しているときにエラーが発生しました。SQLite3スクリプトでデータベースがロックされているのはなぜですか?

--drop use table before replacing it 
DROP TABLE IF EXISTS db.use; 

--Create the use table in the saved database 
CREATE TABLE db.use AS SELECT * FROM use2; -- this is the line that generates the error: Error: near line 145: database is locked 

これらの2つの文は、非同期で実行されるのですか?私はエラーの原因を理解していないが、それはそれと関係があるのだろうかと思っている。

スクリプトをロックステップで実行する方法がありますか?非同期ではありませんか?

+0

ていますか? – dan04

+0

私はそう信じません。 –

+0

これはスクリプトを実行するために使用しているコマンドです。多分 'sqlite3 --init create_db.sql thedb.db'と関係があります。このスクリプトには、 'thedb.db'を読み込むATTACHステートメントもあります。これは競合を引き起こす可能性がありますか? –

答えて

-2

dropステートメントの後にコミットステートメントを追加しようとしましたか? 私は、dropステートメントが完全に実行された後にcreate tableステートメントが実行されることを確認します。

+0

私はしていません。 'COMMIT;'と同じくらい単純ですか? –

+0

はい、私はそう思います。 –

0

これは私がコマンドを実行した方法です:sqlite3 --init script_name.sql dbname.db、および他の場所ではATTACHの文で同じデータベースdbname.dbを読み取っていました。本質的に同じファイルを2回読む。

これはsqlite3のシェルでスクリプトを実行していた私は、解決方法:あなたが同時に同じデータベースにアクセスして、他のスレッドや他のプログラムが存在しないことは確か

sqlite3> .read script_name.sql

関連する問題