2020年7月1日水曜日

cannot VACUUM from within a transaction

センサーログのスクリプトを10分単位で動かしていましたが、試しに1分単位に動かしてみたところ、意外なところで想定外になってしまったようでグラフの表示やら、日時でテンポラリからストレージに移動しているスクリプトが動いてなかったり。
単純にデータ量が1日当たり144件から10倍の1440件になるので、どこかでおかしくなるかとは思っていましたが、それでも想定外でした。

Jul  1 02:03:01 rasp4b4g CRON[9173]: (root) CMD (/usr/local/sbin/savetosd.py)
Jul  1 02:03:01 rasp4b4g CRON[9164]: (CRON) info (No MTA installed, discarding output)

cronのログはsyslogにキックしたログはありましたが、エラーの出力は無い様なので、実際に動かしてみました。(メール設定をしていればエラーがメールで飛んでいく設定を作れるから設定しておいた方が良いかも…)

pi@rasp4b4g:~ $ sudo python3 /usr/local/sbin/savetosd.py
cannot VACUUM from within a transaction

VACUUMでエラーが出ているようです。
ググってみると、トランザクション中にVACUUMを行うとエラーが発生することがあるらしいのでスクリプトを確認してみると…
  1. テーブル間のデータコピー
  2. テンポラリテーブルのデータ削除
  3. VACUUM
  4. commit()
なんで、commitする前にVACUUMさせていたのかは謎ですが、今までVACUUMはトランザクションに影響しないというより、暗礁のcommitが行われてしまうものだとばかり思っていましたが、そうではなくトランザクションとして処理していてバッファが足りなくなったらしっかりエラーを吐き出すようですね。
  1. テーブル間のデータコピー
  2. テンポラリテーブルのデータ削除
  3. commit()
  4. VACUUM
という順序に入れ替えて実行してみると処理が通るようになりました。
グラフの表示が崩れていたのも、正常に戻ったので、グラフ表示させているスクリプトでテンポラリ内のデータが1日以上になってしまうと都合が悪い作りになってるようですね…





関係がありそうなインストール済みのパッケージ
libsqlite3-0:armhf                    3.27.2-3                               armhf        SQLite 3 shared library
php-sqlite3 2:7.3+69 all SQLite3 module for PHP [default]
php7.3-sqlite3 7.3.14-1~deb10u1 armhf SQLite3 module for PHP
libaprutil1-dbd-sqlite3:armhf 1.6.1-4 armhf Apache Portable Runtime Utility Library - SQLite3 Driver
libqt5sql5-sqlite:armhf 5.11.3+dfsg1-1+rpi1+deb10u3 armhf Qt 5 SQLite 3 database driver
スクリプトのpython3上でバージョンの確認
pi@rasp4b4g:~ $ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.27.2'
>>> exit()

2020年6月24日水曜日

passwd

理想はすべてのアカウントパスワードはある程度の強固なもので、それぞれ違うものをきちんと設定すべきです。

が、

一つ二つならまだしも、手持ちのデバイスが増えるにつれ、正直管理なんてできません。
実際は、使用用途によっていくつか決まったパスワードを使いまわすことが多いいわけですが、Raspberry piにターミナルでログインするたびに、パスワードを設定しろとしつこく表示されるのでパスワードの設定をしようとしてみると、

Bad: new password is too simple

と表示され、変更できず。複雑なパスワードにするべきなのはわかってはいるんですけどね。

何とかしたいので、管理者権限で

$ sudo passwd pi

とすれば、確認のパスワードも必要なく、パスワードチェックもされません。

忘れそうなのでメモメモw

2020年4月26日日曜日

セルの書式:億万の単位表示

日本人だと4桁区切りにすると読みやすいですが、カンマは3桁区切りが一般的。
不用意に4桁区切りにするよりは、どうせならとうまい表示方法はないかと調べてみると、書式設定に「####億####万####」と設定すれば良さそうですが、万単位の時に不要な「億」が表示されてしまうので条件を付けくわえて

[>100000000]####億####万####;[>10000]####万####;####

とすることでそれなりに。

これでも不要そうなゼロが消えないので、そこまでやらせようとすると表示用の別のセルにマクロや数式に頼ることになるかと。

コロナ騒ぎで計算するときに人口ベースの比率を計算するときに、桁が良く分からなくなので表計算上で数字を置いておくのに便利です。