published_posts


Description

{“what”:“A published blog post with rendered content and SEO metadata.”,“why”:“Serves as the canonical record for live posts, separating them from drafts and enabling retrieval by slug.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.059488340+00:00”}

Columns

Column Type Size Nulls Auto Default Children Parents Comments
id serial 10 √ nextval('published_posts_id_seq'::regclass)
keywords.post_id keywords_post_id_fkey R

{“what”:“Unique integer identifier for each published post.”,“why”:“Needed to reference a post from other tables without ambiguity.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.070513942+00:00”}

job_id int4 10 null
pipeline_jobs.id published_posts_job_id_fkey R

{“what”:“Identifier of the job that produced this post.”,“why”:“Ties the post to its generation job for auditing and reprocessing.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.087376946+00:00”}

draft_id int4 10 null
drafts.id published_posts_draft_id_fkey R

{“what”:“Identifier of the source draft this post was published from.”,“why”:“Links the published version to its draft for version history and rollback.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.100723990+00:00”}

slug text 2147483647 null

{“what”:“URL-friendly unique string used in the post’s web address.”,“why”:“Enables human-readable and SEO-friendly URLs; without it, posts would need numeric IDs.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.113935018+00:00”}

title text 2147483647 null

{“what”:“Human-readable headline of the post.”,“why”:“Needed for display in lists, search results, and social sharing.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.139421228+00:00”}

keyword text 2147483647 null

{“what”:“Primary search keyword the post targets.”,“why”:“Used for SEO analysis and to group posts by topic.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.162247758+00:00”}

content_md text 2147483647 null

{“what”:“Full post body in Markdown format.”,“why”:“Source content for editing and re-rendering; without it, the original text is lost.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.174552599+00:00”}

content_html text 2147483647 null

{“what”:“Pre-rendered HTML version of the post body.”,“why”:“Served directly to readers to avoid rendering on each request; without it, pages would be slow.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.193546218+00:00”}

meta_description text 2147483647 √ null

{“what”:“Short SEO description for search engine snippets.”,“why”:“Controls the snippet text in search results; without it, search engines may pick arbitrary text.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.213765082+00:00”}

meta_keywords jsonb 2147483647 √ null

{“what”:“JSON array of additional SEO keywords.”,“why”:“Provides extra keyword signals for search engines and content analysis.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.225871461+00:00”}

headings jsonb 2147483647 √ null

{“what”:“JSON structure of the post’s headings (e.g., h1, h2) with hierarchy.”,“why”:“Used for table of contents generation and SEO heading analysis.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.237312760+00:00”}

word_count int4 10 null

{“what”:“Number of words in the post body.”,“why”:“Used for content length metrics and reading time estimation.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.252106515+00:00”}

reading_time_minutes int4 10 √ null

{“what”:“Estimated minutes to read the post, derived from word count.”,“why”:“Shown to readers to set expectations; without it, readers cannot gauge length.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.264771217+00:00”}

quality_score float4 8,8 null

{“what”:“Numeric quality score (likely 0-1) assigned by an algorithm.”,“why”:“Used to filter or rank posts; without it, content quality cannot be compared.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.280633264+00:00”}

serp_snapshot_id int4 10 √ null

{“what”:“Identifier of the search engine results page snapshot taken for this post.”,“why”:“Links to historical SERP data for tracking ranking changes.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.296387529+00:00”}

published_at timestamptz 35,6 √ now()

{“what”:“Timestamp when the post was published, in UTC.”,“why”:“Needed for chronological ordering and to know when the post went live.”,“by”:“fleet-annotator-worker”,“at”:“2026-09-23T00:10:17.313880176+00:00”}

Indexes

Constraint Name Type Sort Column(s)
published_posts_pkey Primary key Asc id
idx_published_keyword Performance Asc keyword
idx_published_slug Performance Asc slug
published_posts_slug_key Must be unique Asc slug

Relationships