質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

926閲覧

Sqliteを監視してデータの追加や更新・削除を検知する事は可能ですか?

s.s

総合スコア13

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2022/07/26 06:02

Ubuntu上にあるサービスのsqliteの中身を監視して
追加・更新・削除などが発生した場合にプログラムを実行するようにしたいのですが、可能でしょうか?

イメージとしては

1.UbutnuでServiceを作成→デーモン化
2.起動しているServiceがsqliteの変化を検知
3.別のServiceを起動

のような感じです・・・

もう一つの手段としては.dbの更新日時の変化をServiceが検知して
別のServiceを起動する。
という方法を考えているのですが、どちらの方が現実的に可能でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/07/26 06:14

その、追加・更新・削除 を行うプログラムで 処理終了後に実行したいプログラムを実行するのではダメなのでしょうか? 現状の構成も具体的に記載されたほうが良いと思います。
s.s

2022/07/26 06:27

情報が足りず申し訳ありません。 上手く伝えられるか不安ですが現状の構成を記載しておきます。 UbuntuでStrapiというCMSが動いており、利用者がStrapiで編集したデータがPOST送信などでDBに保存される動きになっております。 なので、追加・更新・削除を自作のプログラムで行っているわけではありません。
m.ts10806

2022/07/26 06:35

質問は編集できますので、バージョンなどもあわせて記載してもらえればと思います。 Starpi自体のタグはないようですが、Node.jsベースなのでNode.jsなどの質問タグはあったほうが良いかもしれません。 SQLiteそのものより、あくまでアプリ側の対応になると思うので。 「トリガー」という機能はSQLiteにもありますが、あくまでSQLを実行するだけのようですし。
dodox86

2022/07/26 06:42

SQLiteって基本、単一のプロセスがローカルで占有して使うことが前提だった気がするので、StrapiとやらがどのようにそのDBを開いているか(DBを開く際に各種のモードがあったはず)にもよるのでは。他のプロセスから開けなかったり、開けたとしてもStrapiの動きを阻害するようなことがあったら障害になるので、詳細を調べないと判断が難しいと思いますよ。ちょっと作ってみて「動いた動いた」と安易に判断すると後で取り返しのつかないことになります。このコメントを読んでより詳しい方からコメント、回答をいただけるかもしれませんが。
dodox86

2022/07/26 06:55

ただまぁ、少なくとも > もう一つの手段としては.dbの更新日時の変化をServiceが検知して別のServiceを起動する。 はNGだと思われます。Linuxのファイルシステムの遅延書き込みその他によるタイムスタンプ更新の遅延も考えられるし、AUTOINCREMENT(sqlite_sequence)を使っている何らかのカラムがあったら、それだけでも更新し得ます。
退会済みユーザー

退会済みユーザー

2022/07/26 08:09

Sqliteじゃない他のRDBMSを使う構成に変えてしまうのが無難に思えた。
guest

回答2

0

ベストアンサー

追加・更新・削除の検知を行うにはやはりトリガーでしょうね。
外部プログラムも呼び出せるPostgresにもStrapiは対応しているようですから、一考してみてはどうでしょうか。

投稿2022/07/27 18:05

sazi

総合スコア25430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.s

2022/07/29 04:37 編集

当初自分が考えていた手法に近いのはomochiさんから提示していただいた内容ですが、 dodox86さんからの「Linuxのファイルシステムの遅延書き込みその他によるタイムスタンプ更新の遅延も考えられる」との意見を頂き、sqliteではなく他のRDBMSに切り替えて構築した方が確実だし安定するのではないかと考え、ベストアンサーを選ばさせていただきました。
guest

0

inotifywaitコマンドを利用してsqliteのdbファイル自体を監視するのは駄目ですかね?
追加・更新・削除の判別はできませんが、dbに何かしら変化があったかはわかります。

投稿2022/07/27 04:09

omochi

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問