Last active
September 19, 2022 05:26
-
-
Save aoirint/326e707294fdfa64103b1fa2e800e4dd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE posts ( | |
id INTEGER PRIMARY KEY, | |
content TEXT, | |
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now', 'utc')), | |
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now', 'utc')) | |
); | |
CREATE TRIGGER trigger_posts_updated_at AFTER UPDATE ON posts | |
BEGIN | |
UPDATE posts SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now', 'utc') WHERE rowid == NEW.rowid; | |
END; | |
INSERT INTO posts(content) VALUES('a'); | |
SELECT * FROM posts; | |
UPDATE posts SET content='b' WHERE id=1; | |
SELECT * FROM posts; |
SQLiteでは、DB内の時刻文字列はすべてUTC、という仮定をおくべきな気がするけれど、まあ特定のタイムゾーンでしか使われない・タイムゾーンを跨いで使われることがない確信があるアプリケーションなら、何かしらのパフォーマンス最適化のためにローカル時刻にすることもあるのかもしれない。
(異なるタイムゾーンを持つシステムにデータを移行しないこと、ローカル時刻のタイムゾーンが不変であることが保証されている)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ベース
下と同じ挙動にするのは、実装が冗長になるので諦めた
(複雑な処理をSQLiteで実装するのはパフォーマンス的に好ましくないのかもしれない)