1

外部データから sqlite データベースを作成する python スクリプトがあります。これはうまくいきます。しかし、このデータベースで GROUP BY クエリを実行するたびに、「エラー: データベース ファイルを開けません」というメッセージが表示されます。通常の SELECT クエリは機能します。

これは、python の sqlite3 ライブラリと sqlite3 cli バイナリの両方の問題です。

sqlite> SELECT count(*) FROM REC;
count(*)
----------
528489
sqlite> SELECT count(*) FROM REC GROUP BY VERSION;
Error: unable to open database file
sqlite>

これらのエラーは通常、アクセス許可エラーであることを知っています (StackOverflow でこのトピックに関するすべての質問を読みました) が、私の場合はそうではないことは確かです。

  1. 簡単に作成されたデータベースと読み取り要求について話している
  2. アクセス許可を確認しました: ファイルとそれに含まれるフォルダーの両方に書き込みアクセス許可が設定されています
  3. データベースに書き込むこともできます。新しいテーブルを作成することは問題ありません。
  4. デバイスはいっぱいではありません。十分なスペースがあります。
4

1 に答える 1

6

プロセスが TEMP ディレクトリにアクセスできることを確認してください。

SQLite の一時ディスク ファイルの使用に関するドキュメントから:

SQLite は一時インデックスを使用して、次のような SQL 言語機能を実装する場合があります。

  • ORDER BY または GROUP BY 句
  • 集計クエリの DISTINCT キーワード
  • UNION、EXCEPT、または INTERSECT で結合された複合 SELECT ステートメント

各一時インデックスは、独自の一時ファイルに格納されます。一時インデックスの一時ファイルは、それを使用するステートメントの最後で自動的に削除されます。

temp_storeプラグマMEMORY次のように設定することで、おそらく一時ストレージに問題があるかどうかを確認できます。

PRAGMA temp_store = MEMORY;

GROUP BY句の一時インデックスをメモリに保持するよう SQLite に指示します。

または、グループ化している列に明示的なインデックスを作成して、一時インデックスが作成されないようにします。

于 2013-04-24T11:23:27.053 に答える