build: 更新 D1 数据库迁移文件以优化表结构
This commit is contained in:
1 parent
457329d6c0
commit
b565f9bcda
2 files changed
+55
-39
No files matched your search
@@ -1,27 +1,20 @@
|
|||||||
DROP TABLE IF EXISTS post_tags;
|
-- BlogFlare baseline. This migration is safe to apply to a fresh database and
|
||||||
DROP TABLE IF EXISTS posts;
|
-- to databases previously initialized from the legacy schema.sql file.
|
||||||
DROP TABLE IF EXISTS series;
|
|
||||||
DROP TABLE IF EXISTS tags;
|
|
||||||
DROP TABLE IF EXISTS categories;
|
|
||||||
DROP TABLE IF EXISTS pages;
|
|
||||||
DROP TABLE IF EXISTS settings;
|
|
||||||
DROP TABLE IF EXISTS users;
|
|
||||||
DROP TABLE IF EXISTS attachments;
|
|
||||||
|
|
||||||
CREATE TABLE users (
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
username TEXT NOT NULL UNIQUE,
|
username TEXT NOT NULL UNIQUE,
|
||||||
password_hash TEXT NOT NULL,
|
password_hash TEXT NOT NULL,
|
||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE categories (
|
CREATE TABLE IF NOT EXISTS categories (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL UNIQUE,
|
name TEXT NOT NULL UNIQUE,
|
||||||
slug TEXT NOT NULL UNIQUE
|
slug TEXT NOT NULL UNIQUE
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE series (
|
CREATE TABLE IF NOT EXISTS series (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
name TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
||||||
slug TEXT NOT NULL UNIQUE,
|
slug TEXT NOT NULL UNIQUE,
|
||||||
@@ -29,7 +22,7 @@ CREATE TABLE series (
|
|||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE posts (
|
CREATE TABLE IF NOT EXISTS posts (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
slug TEXT NOT NULL UNIQUE,
|
slug TEXT NOT NULL UNIQUE,
|
||||||
title TEXT NOT NULL,
|
title TEXT NOT NULL,
|
||||||
@@ -46,9 +39,10 @@ CREATE TABLE posts (
|
|||||||
FOREIGN KEY (series_id) REFERENCES series(id) ON DELETE SET NULL
|
FOREIGN KEY (series_id) REFERENCES series(id) ON DELETE SET NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX idx_posts_series_order ON posts(series_id, series_weight, published_at, id);
|
CREATE INDEX IF NOT EXISTS idx_posts_series_order
|
||||||
|
ON posts(series_id, series_weight, published_at, id);
|
||||||
|
|
||||||
CREATE TABLE pages (
|
CREATE TABLE IF NOT EXISTS pages (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
slug TEXT NOT NULL UNIQUE,
|
slug TEXT NOT NULL UNIQUE,
|
||||||
title TEXT NOT NULL,
|
title TEXT NOT NULL,
|
||||||
@@ -59,12 +53,12 @@ CREATE TABLE pages (
|
|||||||
FOREIGN KEY (author_id) REFERENCES users(id)
|
FOREIGN KEY (author_id) REFERENCES users(id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE tags (
|
CREATE TABLE IF NOT EXISTS tags (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL UNIQUE
|
name TEXT NOT NULL UNIQUE
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE post_tags (
|
CREATE TABLE IF NOT EXISTS post_tags (
|
||||||
post_id INTEGER NOT NULL,
|
post_id INTEGER NOT NULL,
|
||||||
tag_id INTEGER NOT NULL,
|
tag_id INTEGER NOT NULL,
|
||||||
PRIMARY KEY (post_id, tag_id),
|
PRIMARY KEY (post_id, tag_id),
|
||||||
@@ -72,14 +66,14 @@ CREATE TABLE post_tags (
|
|||||||
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE settings (
|
CREATE TABLE IF NOT EXISTS settings (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
key TEXT NOT NULL UNIQUE,
|
key TEXT NOT NULL UNIQUE,
|
||||||
value TEXT NOT NULL,
|
value TEXT NOT NULL,
|
||||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE attachments (
|
CREATE TABLE IF NOT EXISTS attachments (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
filename TEXT NOT NULL,
|
filename TEXT NOT NULL,
|
||||||
key TEXT NOT NULL UNIQUE,
|
key TEXT NOT NULL UNIQUE,
|
||||||
@@ -88,36 +82,56 @@ CREATE TABLE attachments (
|
|||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Insert a default user
|
INSERT OR IGNORE INTO users (username, password_hash) VALUES ('admin', 'admin');
|
||||||
INSERT INTO users (username, password_hash) VALUES ('admin', 'admin');
|
|
||||||
|
|
||||||
-- Insert default categories
|
INSERT OR IGNORE INTO categories (name, slug) VALUES
|
||||||
INSERT INTO categories (name, slug) VALUES ('默认分类', 'uncategorized'), ('技术分享', 'tech'), ('生活随笔', 'life');
|
('默认分类', 'uncategorized'),
|
||||||
|
('技术分享', 'tech'),
|
||||||
|
('生活随笔', 'life');
|
||||||
|
|
||||||
-- Insert dummy posts
|
INSERT OR IGNORE INTO posts (slug, title, content, author_id, category_id) VALUES
|
||||||
INSERT INTO posts (slug, title, content, author_id, category_id) VALUES
|
(
|
||||||
('hello-world', 'Hello, BlogFlare!', 'This is my first post on BlogFlare.
|
'hello-world',
|
||||||
|
'Hello, BlogFlare!',
|
||||||
|
'This is my first post on BlogFlare.
|
||||||
<!--more-->
|
<!--more-->
|
||||||
Welcome to my new blog powered by **SvelteKit** and **Cloudflare D1**.
|
Welcome to my new blog powered by **SvelteKit** and **Cloudflare D1**.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This is a DoIt style admonition!
|
> This is a DoIt style admonition!
|
||||||
|
|
||||||
It is incredibly fast and cheap to host.', 1, 2),
|
It is incredibly fast and cheap to host.',
|
||||||
('void-theme', 'The Beauty of VOID', 'Typography is essential.
|
(SELECT id FROM users WHERE username = 'admin'),
|
||||||
|
(SELECT id FROM categories WHERE slug = 'tech')
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'void-theme',
|
||||||
|
'The Beauty of VOID',
|
||||||
|
'Typography is essential.
|
||||||
<!--more-->
|
<!--more-->
|
||||||
Typecho Theme VOID inspired this design. It uses a very clean layout.', 1, 2);
|
Typecho Theme VOID inspired this design. It uses a very clean layout.',
|
||||||
|
(SELECT id FROM users WHERE username = 'admin'),
|
||||||
|
(SELECT id FROM categories WHERE slug = 'tech')
|
||||||
|
);
|
||||||
|
|
||||||
INSERT INTO tags (name) VALUES ('Welcome'), ('Design');
|
INSERT OR IGNORE INTO tags (name) VALUES ('Welcome'), ('Design');
|
||||||
INSERT INTO post_tags (post_id, tag_id) VALUES (1, 1), (2, 2);
|
|
||||||
|
|
||||||
-- Insert default aliases settings
|
INSERT OR IGNORE INTO post_tags (post_id, tag_id) VALUES
|
||||||
INSERT INTO settings (key, value) VALUES
|
(
|
||||||
|
(SELECT id FROM posts WHERE slug = 'hello-world'),
|
||||||
|
(SELECT id FROM tags WHERE name = 'Welcome')
|
||||||
|
),
|
||||||
|
(
|
||||||
|
(SELECT id FROM posts WHERE slug = 'void-theme'),
|
||||||
|
(SELECT id FROM tags WHERE name = 'Design')
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT OR IGNORE INTO settings (key, value) VALUES
|
||||||
('alias.post', '文章'),
|
('alias.post', '文章'),
|
||||||
('alias.category', '分类'),
|
('alias.category', '分类'),
|
||||||
('alias.tag', '标签'),
|
('alias.tag', '标签'),
|
||||||
('alias.series', '系列'),
|
('alias.series', '系列'),
|
||||||
('alias.page', '页面'),
|
('alias.page', '页面'),
|
||||||
('site.title', 'BlogFlare'),
|
('site.title', 'BlogFlare'),
|
||||||
('site.description', 'A high-performance blog powered by Cloudflare D1, R2, and KV.'),
|
('site.description', 'A high-performance blog powered by Cloudflare D1 and R2.'),
|
||||||
('r2.public_domain', 'https://assets.yourdomain.com');
|
('r2.public_domain', 'https://assets.yourdomain.com');
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
CREATE TABLE series (
|
-- Compatibility migration for installations that already used schema.sql.
|
||||||
|
-- The baseline now contains the final posts shape, so this migration must not
|
||||||
|
-- issue non-idempotent ALTER TABLE statements.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS series (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
name TEXT NOT NULL UNIQUE COLLATE NOCASE,
|
||||||
slug TEXT NOT NULL UNIQUE,
|
slug TEXT NOT NULL UNIQUE,
|
||||||
@@ -6,9 +10,7 @@ CREATE TABLE series (
|
|||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
ALTER TABLE posts ADD COLUMN series_id INTEGER REFERENCES series(id) ON DELETE SET NULL;
|
CREATE INDEX IF NOT EXISTS idx_posts_series_order
|
||||||
ALTER TABLE posts ADD COLUMN series_weight INTEGER;
|
ON posts(series_id, series_weight, published_at, id);
|
||||||
|
|
||||||
CREATE INDEX idx_posts_series_order ON posts(series_id, series_weight, published_at, id);
|
|
||||||
|
|
||||||
INSERT OR IGNORE INTO settings (key, value) VALUES ('alias.series', '系列');
|
INSERT OR IGNORE INTO settings (key, value) VALUES ('alias.series', '系列');
|
||||||
Reference in new issue
Block a user