Skip to content

Instantly share code, notes, and snippets.

@simonw

simonw/schema.md Secret

Created August 11, 2025 23:56
Show Gist options
  • Select an option

  • Save simonw/7b2d0d327afc32ad6c90179fa76290ad to your computer and use it in GitHub Desktop.

Select an option

Save simonw/7b2d0d327afc32ad6c90179fa76290ad to your computer and use it in GitHub Desktop.
Tool call: Datasette_schema({})
  [
    {
      "group_concat(sql, ';')": "CREATE TABLE [comprehend_entity_types] (\n   [id] INTEGER PRIMARY KEY,\n   [value] TEXT\n);CREATE TABLE [comprehend_entities] (\n   [id] INTEGER PRIMARY KEY,\n   [name] TEXT,\n   [type] INTEGER REFERENCES [comprehend_entity_types]([id])\n);CREATE TABLE [blog_entry_comprehend_entities] (\n   [id] INTEGER REFERENCES [blog_entry]([id]),\n   [score] FLOAT,\n   [entity] INTEGER REFERENCES [comprehend_entities]([id]),\n   [begin_offset] INTEGER,\n   [end_offset] INTEGER\n);CREATE UNIQUE INDEX [idx_comprehend_entity_types_value]\n    ON [comprehend_entity_types] ([value]);CREATE UNIQUE INDEX [idx_comprehend_entities_type_name]\n    ON [comprehend_entities] ([type], [name]);CREATE TABLE [blog_entry_comprehend_entities_done] (\n   [id] INTEGER PRIMARY KEY REFERENCES [blog_entry]([id])\n);CREATE TABLE [blog_entry_embeddings] (\n   [id] INTEGER PRIMARY KEY,\n   [embedding] BLOB\n);CREATE VIRTUAL TABLE [blog_series_fts] USING FTS5 (\n    [title], [summary],\n    tokenize='porter',\n    content=[blog_series]\n);CREATE TABLE 'blog_series_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE 'blog_series_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE 'blog_series_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE 'blog_series_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE VIRTUAL TABLE [blog_tag_fts] USING FTS5 (\n    [tag],\n    tokenize='porter',\n    content=[blog_tag]\n);CREATE TABLE 'blog_tag_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE 'blog_tag_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE 'blog_tag_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE 'blog_tag_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE VIRTUAL TABLE [blog_quotation_fts] USING FTS5 (\n    [quotation], [source],\n    tokenize='porter',\n    content=[blog_quotation]\n);CREATE TABLE 'blog_quotation_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE 'blog_quotation_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE 'blog_quotation_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE 'blog_quotation_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE VIRTUAL TABLE [blog_entry_fts] USING FTS5 (\n    [title], [body],\n    tokenize='porter',\n    content=[blog_entry]\n);CREATE TABLE 'blog_entry_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE 'blog_entry_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE 'blog_entry_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE 'blog_entry_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE VIRTUAL TABLE [blog_blogmark_fts] USING FTS5 (\n    [link_title], [via_title], [commentary],\n    tokenize='porter',\n    content=[blog_blogmark]\n);CREATE TABLE 'blog_blogmark_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE 'blog_blogmark_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE 'blog_blogmark_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE 'blog_blogmark_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TABLE \"blog_previoustagname\" (\n   [id] INTEGER PRIMARY KEY,\n   [previous_name] TEXT,\n   [tag_id] INTEGER REFERENCES [blog_tag]([id])\n);CREATE TABLE [blog_tag] (\n   [id] INTEGER PRIMARY KEY,\n   [tag] TEXT,\n   [description] TEXT\n);CREATE TABLE \"auth_permission\" (\n   [id] INTEGER PRIMARY KEY,\n   [name] TEXT,\n   [content_type_id] INTEGER REFERENCES [django_content_type]([id]),\n   [codename] TEXT\n);CREATE TABLE \"blog_blogmark_tags\" (\n   [id] INTEGER PRIMARY KEY,\n   [blogmark_id] INTEGER REFERENCES [blog_blogmark]([id]),\n   [tag_id] INTEGER REFERENCES [blog_tag]([id])\n);CREATE TABLE \"blog_entry\" (\n   [id] INTEGER PRIMARY KEY,\n   [title] TEXT,\n   [slug] TEXT,\n   [body] TEXT,\n   [created] TEXT,\n   [metadata] TEXT,\n   [tweet_html] TEXT,\n   [import_ref] TEXT,\n   [extra_head_html] TEXT,\n   [card_image] TEXT,\n   [custom_template] TEXT,\n   [series_id] INTEGER REFERENCES [blog_series]([id]),\n   [is_draft] INTEGER,\n   [live_timezone] TEXT\n);CREATE TABLE \"blog_entry_tags\" (\n   [id] INTEGER PRIMARY KEY,\n   [entry_id] INTEGER REFERENCES [blog_entry]([id]),\n   [tag_id] INTEGER REFERENCES [blog_tag]([id])\n);CREATE TABLE [blog_series] (\n   [id] INTEGER PRIMARY KEY,\n   [created] TEXT,\n   [slug] TEXT,\n   [title] TEXT,\n   [summary] TEXT\n);CREATE TABLE [auth_user] (\n   [id] INTEGER PRIMARY KEY,\n   [password] TEXT,\n   [last_login] TEXT,\n   [is_superuser] INTEGER,\n   [username] TEXT,\n   [first_name] TEXT,\n   [last_name] TEXT,\n   [email] TEXT,\n   [is_staff] INTEGER,\n   [is_active] INTEGER,\n   [date_joined] TEXT\n);CREATE TABLE \"blog_quotation\" (\n   [id] INTEGER PRIMARY KEY,\n   [slug] TEXT,\n   [quotation] TEXT,\n   [source] TEXT,\n   [source_url] TEXT,\n   [created] TEXT,\n   [metadata] TEXT,\n   [import_ref] TEXT,\n   [card_image] TEXT,\n   [series_id] TEXT REFERENCES [blog_series]([id]),\n   [is_draft] INTEGER,\n   [context] TEXT\n);CREATE TABLE \"blog_blogmark\" (\n   [id] INTEGER PRIMARY KEY,\n   [slug] TEXT,\n   [link_url] TEXT,\n   [link_title] TEXT,\n   [via_url] TEXT,\n   [via_title] TEXT,\n   [commentary] TEXT,\n   [created] TEXT,\n   [metadata] TEXT,\n   [import_ref] TEXT,\n   [card_image] TEXT,\n   [series_id] TEXT REFERENCES [blog_series]([id]),\n   [use_markdown] INTEGER,\n   [is_draft] INTEGER\n);CREATE TABLE \"blog_note_tags\" (\n   [id] INTEGER PRIMARY KEY,\n   [note_id] INTEGER REFERENCES [blog_note]([id]),\n   [tag_id] INTEGER REFERENCES [blog_tag]([id])\n);CREATE TABLE \"blog_quotation_tags\" (\n   [id] INTEGER PRIMARY KEY,\n   [quotation_id] INTEGER REFERENCES [blog_quotation]([id]),\n   [tag_id] INTEGER REFERENCES [blog_tag]([id])\n);CREATE TABLE [redirects_redirect] (\n   [id] INTEGER PRIMARY KEY,\n   [domain] TEXT,\n   [path] TEXT,\n   [target] TEXT,\n   [created] TEXT\n);CREATE TABLE \"blog_note\" (\n   [id] INTEGER PRIMARY KEY,\n   [created] TEXT,\n   [slug] TEXT,\n   [metadata] TEXT,\n   [search_document] TEXT,\n   [import_ref] TEXT,\n   [card_image] TEXT,\n   [is_draft] INTEGER,\n   [body] TEXT,\n   [series_id] TEXT REFERENCES [blog_series]([id]),\n   [title] TEXT\n);CREATE TABLE [django_content_type] (\n   [id] INTEGER PRIMARY KEY,\n   [app_label] TEXT,\n   [model] TEXT\n);CREATE TABLE til(\n  path TEXT,\n  topic TEXT,\n  title TEXT,\n  url TEXT,\n  body TEXT,\n  html TEXT,\n  created TEXT,\n  created_utc TEXT,\n  updated TEXT,\n  updated_utc TEXT,\n  shot_hash TEXT,\n  slug TEXT,\n  summary TEXT\n)"
    }
  ]


Tool call: Datasette_query({'sqlite_sql': 'SELECT t.tag, COUNT(DISTINCT et.entry_id) AS entry_count\nFROM blog_entry_tags et\nJOIN blog_tag t ON t.id = et.tag_id\nJOIN blog_entry e ON e.id = et.entry_id\nWHERE COALESCE(e.is_draft, 0) = 0\nGROUP BY t.id, t.tag\nORDER BY entry_count DESC, t.tag ASC\nLIMIT 10;'})
  [
    {
      "tag": "quora",
      "entry_count": 1003
    },
    {
      "tag": "projects",
      "entry_count": 265
    },
    {
      "tag": "datasette",
      "entry_count": 238
    },
    {
      "tag": "python",
      "entry_count": 213
    },
    {
      "tag": "ai",
      "entry_count": 200
    },
    {
      "tag": "llms",
      "entry_count": 200
    },
    {
      "tag": "generative-ai",
      "entry_count": 197
    },
    {
      "tag": "weeknotes",
      "entry_count": 193
    },
    {
      "tag": "web-development",
      "entry_count": 166
    },
    {
      "tag": "startups",
      "entry_count": 157
    }
  ]

Top 10 tags by number of entries (excluding drafts):
- quora — 1003
- projects — 265
- datasette — 238
- python — 213
- ai — 200
- llms — 200
- generative-ai — 197
- weeknotes — 193
- web-development — 166
- startups — 157
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment