Skip to content

Instantly share code, notes, and snippets.

@aoirint
Last active September 19, 2022 05:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aoirint/326e707294fdfa64103b1fa2e800e4dd to your computer and use it in GitHub Desktop.
Save aoirint/326e707294fdfa64103b1fa2e800e4dd to your computer and use it in GitHub Desktop.
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;
@aoirint
Copy link
Author

aoirint commented Sep 19, 2022

ベース


下と同じ挙動にするのは、実装が冗長になるので諦めた

(複雑な処理をSQLiteで実装するのはパフォーマンス的に好ましくないのかもしれない)

@aoirint
Copy link
Author

aoirint commented Sep 19, 2022

SQLiteでは、DB内の時刻文字列はすべてUTC、という仮定をおくべきな気がするけれど、まあ特定のタイムゾーンでしか使われない・タイムゾーンを跨いで使われることがない確信があるアプリケーションなら、何かしらのパフォーマンス最適化のためにローカル時刻にすることもあるのかもしれない。

(異なるタイムゾーンを持つシステムにデータを移行しないこと、ローカル時刻のタイムゾーンが不変であることが保証されている)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment