sqlite3 コマンドを実行したら “– Loading resources from ~/.sqliterc” というメッセージが表示され困った話
はじめに
最近、なぜだか急に SQLite 周りの話題で盛り上がり始めましたね。
過去にマーケティングの効果測定サービスの設計/開発/運用をしていたときには、ストレージ層(MySQL クラスタ)の冗長化の一環として、SQLite を各 Web サーバに定期的にばらまく、といったキャッシュ機構を導入したいた事がありました。
その時のことを思い出して、懐かしさを感じています。
今回は自分の作業用 PC で sqlite3 コマンドを実行したところ、 -- Loading resources from ~/.sqliterc というメッセージが出力されました。
こちらのメッセージが邪魔なのでなんとか除外したいなぁと悩んで対処したことをエントリにまとめてみました。
検証環境
| |
問題
とある SQLite データベースファイル test.db があり、こちらにはテーブル t1 が含まれています。
| |
t1 テーブルデータを全て閲覧したかったので、 sqlite3 コマンドの引数に SQL を指定し実行してみました。
| |
レコードが 2 件挿入されているのがわかったのですが、出力結果の 1 行目のメッセージが気になりました。
| |
/Users/genzouw/.sqliterc というファイルは以前自分で用意したファイルです。
sqlite3 コマンド実行時の挙動を変更するための設定ファイルになります。
| |
設定は 2 行記述してあります。
.header onで出力結果にヘッダー行が追加されます。.mode columnで出力列の区切り文字がデフォルトの|から タブ区切りとなります。
-- Loading resources from /Users/genzouw/.sqliterc という文言があると、 SQL 実行結果をパイプで後続に渡すといったことをしたい場合に面倒が起きそうで、なんとかこれが表示されないようにしようと思いました。
対処法 1 : ~/.sqliterc を削除 OR 移動
~/.sqliterc ファイルがあることで不要なメッセージが出力されてしまうので、このファイルを一時的に削除または移動すればメッセージが表示されないようになります。
| |
メッセージは表示されないようになりました。
しかし、出力フォーマットも変わってしまい、また出力後にまた .sqliterc ファイルをもとに戻す作業が必要になります。
対処法 2 : インタラクティブな操作をやめる( 標準入力を塞ぐ )
SQLite のコードを見てみます。
以下の 2 つの条件を満たした状態で sqlite3 コマンドが起動すると、このメッセージが表示されるようです。
~/.sqlitercファイルが存在- インタラクティブな標準入力を保持
先程紹介した 「 ~/.sqliterc ファイルの削除または移動」は 1 つ目の条件を無効化する対処です。
対処法 2 では、 インタラクティブな標準入力を無効化する対処になります。
以下のいずれかで対処できます。
| |
対処法 3 : SQL を標準入力で渡す
対処法 2 に似ています。SQL を標準入力経由で渡します。 インタラクティブな標準入力を 閉じる という考えでは、対処法 2 と一緒かもしれません。
| |
対処法 4 : 気にしないようにする
いっそ、無視してしまいましょう。
というのも、この -- Loading resources from /Users/genzouw/.sqliterc というメッセージは標準出力ではなく 標準エラー出力 に出力されているメッセージだからです。
sqlite3 コマンドの実行結果をパイプで次の処理に渡したとしても、 -- Loading resources from /Users/genzouw/.sqliterc のメッセージはパイプで渡りません。
sqlite3 コマンドの実行結果をリダイレクトでファイルに書き出した場合も同様で、 このメッセージは書き込まれません。
| |
ひとこと
sqlite3 コマンドに対して SQL を指定する際には、標準入力で渡してやるのが素直そうです。