[{"data":1,"prerenderedAt":2038},["ShallowReactive",2],{"navigation_docs":3,"-essentials-views":106,"-essentials-views-surround":2033},[4,26,57,83],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":25},"Getting Started","i-lucide-rocket","/getting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-play",false,{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":25},"Core Concepts","i-lucide-book-open","/essentials","2.essentials",[32,37,42,47,52],{"title":33,"path":34,"stem":35,"icon":36},"Models","/essentials/models","2.essentials/1.models","i-lucide-box",{"title":38,"path":39,"stem":40,"icon":41},"Collections","/essentials/collections","2.essentials/2.collections","i-lucide-folder",{"title":43,"path":44,"stem":45,"icon":46},"Views","/essentials/views","2.essentials/3.views","i-lucide-table",{"title":48,"path":49,"stem":50,"icon":51},"Schema Evolution","/essentials/schema-evolution","2.essentials/4.schema-evolution","i-lucide-git-branch",{"title":53,"path":54,"stem":55,"icon":56},"Relations","/essentials/relations","2.essentials/5.relations","i-lucide-link",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":25},"Advanced","i-lucide-settings","/advanced","3.advanced",[63,68,73,78],{"title":64,"path":65,"stem":66,"icon":67},"Time-Series","/advanced/time-series","3.advanced/1.time-series","i-lucide-chart-line",{"title":69,"path":70,"stem":71,"icon":72},"Async Support","/advanced/async","3.advanced/2.async","i-lucide-zap",{"title":74,"path":75,"stem":76,"icon":77},"PostgreSQL","/advanced/postgresql","3.advanced/3.postgresql","i-lucide-database",{"title":79,"path":80,"stem":81,"icon":82},"Performance Guide","/advanced/performance","3.advanced/4.performance","i-lucide-gauge",{"title":84,"icon":85,"path":86,"stem":87,"children":88,"page":25},"API Reference","i-lucide-file-code","/api","4.api",[89,94,98,101],{"title":90,"path":91,"stem":92,"icon":93},"Engine","/api/engine","4.api/1.engine","i-lucide-cog",{"title":95,"path":96,"stem":97,"icon":41},"Collection","/api/collection","4.api/2.collection",{"title":33,"path":99,"stem":100,"icon":36},"/api/models","4.api/3.models",{"title":102,"path":103,"stem":104,"icon":105},"Exceptions","/api/exceptions","4.api/4.exceptions","i-lucide-alert-triangle",{"id":107,"title":43,"body":108,"description":2026,"extension":2027,"links":2028,"meta":2029,"navigation":2030,"path":44,"seo":2031,"stem":45,"__hash__":2032},"docs/2.essentials/3.views.md",{"type":109,"value":110,"toc":2010},"minimark",[111,115,126,138,143,146,516,519,644,651,744,748,763,916,923,926,930,936,978,981,1032,1048,1056,1063,1070,1135,1141,1217,1224,1360,1364,1367,1543,1546,1581,1584,1588,1591,1619,1632,1635,1700,1707,1711,1714,1736,1740,1755,1788,1792,1798,1803,1806,1835,1882,1887,1893,1941,1946,1952,1996,2006],[112,113,114],"p",{},"Views are CentauroDB's bridge between flexible JSON storage and the SQL world. One call extracts each model field from the JSON blob into a queryable SQL column:",[116,117,122],"pre",{"className":118,"code":120,"language":121},[119],"language-text","┌──────┬──────────┬──────────────────────────────────────────────────────┐\n│  id  │   name   │                    meta (JSON)                       │\n├──────┼──────────┼──────────────────────────────────────────────────────┤\n│  1   │  Sensor  │ {\"unit\":\"C\",\"location\":\"pelion\",\"threshold\":80}      │\n│  2   │  Sensor  │ {\"unit\":\"F\",\"location\":\"olympus\",\"threshold\":200}    │\n└──────┴──────────┴──────────────────────────────────────────────────────┘\n\n        ↓  create_view(\"dashboard\", Sensor)\n\n┌──────┬──────────┬──────┬──────────┬───────────┐\n│  id  │   name   │ unit │ location │ threshold │  ← plain SQL columns\n├──────┼──────────┼──────┼──────────┼───────────┤\n│  1   │  Sensor  │  C   │  pelion  │    80     │\n│  2   │  Sensor  │  F   │  olympus │   200     │\n└──────┴──────────┴──────┴──────────┴───────────┘\n","text",[123,124,120],"code",{"__ignoreMap":125},"",[127,128,129,130,133,134,137],"tip",{},"Views are standard SQL — query them with ",[123,131,132],{},"coll.sql_select()"," (returns a Polars DataFrame), or from any external tool: DBeaver, Metabase, Jupyter, or raw ",[123,135,136],{},"SELECT * FROM",".",[139,140,142],"h2",{"id":141},"your-first-view","Your first view",[112,144,145],{},"Let's say you have sensors stored in a collection and want to query them with SQL:",[116,147,151],{"className":148,"code":149,"language":150,"meta":125,"style":125},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from centaurodb import Engine, Collection, CentauroModel\n\nengine = Engine(\"monitoring.db\")\ncoll = Collection(engine, \"monitoring\")\n\nclass Sensor(CentauroModel):\n    __centauro_name__ = \"Sensor\"\n    unit: str = \"\"\n    location: str = \"\"\n    threshold: float = 100.0\n\n# Write some data\ncoll.write_objects([\n    Sensor(unit=\"Celsius\", location=\"pelion\", threshold=80),\n    Sensor(unit=\"Fahrenheit\", location=\"olympus\", threshold=200),\n])\n\n# Create a view\ncoll.create_view(\"dashboard\", Sensor)\ncoll.create_index(\"unit\")  # expression index for fast filtering\n","python",[123,152,153,184,191,218,245,250,269,285,303,317,334,339,346,360,408,450,456,461,467,492],{"__ignoreMap":125},[154,155,158,162,166,169,172,176,179,181],"span",{"class":156,"line":157},"line",1,[154,159,161],{"class":160},"s7zQu","from",[154,163,165],{"class":164},"sTEyZ"," centaurodb ",[154,167,168],{"class":160},"import",[154,170,171],{"class":164}," Engine",[154,173,175],{"class":174},"sMK4o",",",[154,177,178],{"class":164}," Collection",[154,180,175],{"class":174},[154,182,183],{"class":164}," CentauroModel\n",[154,185,187],{"class":156,"line":186},2,[154,188,190],{"emptyLinePlaceholder":189},true,"\n",[154,192,194,197,200,203,206,209,213,215],{"class":156,"line":193},3,[154,195,196],{"class":164},"engine ",[154,198,199],{"class":174},"=",[154,201,171],{"class":202},"s2Zo4",[154,204,205],{"class":174},"(",[154,207,208],{"class":174},"\"",[154,210,212],{"class":211},"sfazB","monitoring.db",[154,214,208],{"class":174},[154,216,217],{"class":174},")\n",[154,219,221,224,226,228,230,233,235,238,241,243],{"class":156,"line":220},4,[154,222,223],{"class":164},"coll ",[154,225,199],{"class":174},[154,227,178],{"class":202},[154,229,205],{"class":174},[154,231,232],{"class":202},"engine",[154,234,175],{"class":174},[154,236,237],{"class":174}," \"",[154,239,240],{"class":211},"monitoring",[154,242,208],{"class":174},[154,244,217],{"class":174},[154,246,248],{"class":156,"line":247},5,[154,249,190],{"emptyLinePlaceholder":189},[154,251,253,257,261,263,266],{"class":156,"line":252},6,[154,254,256],{"class":255},"spNyl","class",[154,258,260],{"class":259},"sBMFI"," Sensor",[154,262,205],{"class":174},[154,264,265],{"class":259},"CentauroModel",[154,267,268],{"class":174},"):\n",[154,270,272,275,277,279,282],{"class":156,"line":271},7,[154,273,274],{"class":164},"    __centauro_name__ ",[154,276,199],{"class":174},[154,278,237],{"class":174},[154,280,281],{"class":211},"Sensor",[154,283,284],{"class":174},"\"\n",[154,286,288,291,294,297,300],{"class":156,"line":287},8,[154,289,290],{"class":164},"    unit",[154,292,293],{"class":174},":",[154,295,296],{"class":259}," str",[154,298,299],{"class":174}," =",[154,301,302],{"class":174}," \"\"\n",[154,304,306,309,311,313,315],{"class":156,"line":305},9,[154,307,308],{"class":164},"    location",[154,310,293],{"class":174},[154,312,296],{"class":259},[154,314,299],{"class":174},[154,316,302],{"class":174},[154,318,320,323,325,328,330],{"class":156,"line":319},10,[154,321,322],{"class":164},"    threshold",[154,324,293],{"class":174},[154,326,327],{"class":259}," float",[154,329,299],{"class":174},[154,331,333],{"class":332},"sbssI"," 100.0\n",[154,335,337],{"class":156,"line":336},11,[154,338,190],{"emptyLinePlaceholder":189},[154,340,342],{"class":156,"line":341},12,[154,343,345],{"class":344},"sHwdD","# Write some data\n",[154,347,349,352,354,357],{"class":156,"line":348},13,[154,350,351],{"class":164},"coll",[154,353,137],{"class":174},[154,355,356],{"class":202},"write_objects",[154,358,359],{"class":174},"([\n",[154,361,363,366,368,372,374,376,379,381,383,386,388,390,393,395,397,400,402,405],{"class":156,"line":362},14,[154,364,365],{"class":202},"    Sensor",[154,367,205],{"class":174},[154,369,371],{"class":370},"sHdIc","unit",[154,373,199],{"class":174},[154,375,208],{"class":174},[154,377,378],{"class":211},"Celsius",[154,380,208],{"class":174},[154,382,175],{"class":174},[154,384,385],{"class":370}," location",[154,387,199],{"class":174},[154,389,208],{"class":174},[154,391,392],{"class":211},"pelion",[154,394,208],{"class":174},[154,396,175],{"class":174},[154,398,399],{"class":370}," threshold",[154,401,199],{"class":174},[154,403,404],{"class":332},"80",[154,406,407],{"class":174},"),\n",[154,409,411,413,415,417,419,421,424,426,428,430,432,434,437,439,441,443,445,448],{"class":156,"line":410},15,[154,412,365],{"class":202},[154,414,205],{"class":174},[154,416,371],{"class":370},[154,418,199],{"class":174},[154,420,208],{"class":174},[154,422,423],{"class":211},"Fahrenheit",[154,425,208],{"class":174},[154,427,175],{"class":174},[154,429,385],{"class":370},[154,431,199],{"class":174},[154,433,208],{"class":174},[154,435,436],{"class":211},"olympus",[154,438,208],{"class":174},[154,440,175],{"class":174},[154,442,399],{"class":370},[154,444,199],{"class":174},[154,446,447],{"class":332},"200",[154,449,407],{"class":174},[154,451,453],{"class":156,"line":452},16,[154,454,455],{"class":174},"])\n",[154,457,459],{"class":156,"line":458},17,[154,460,190],{"emptyLinePlaceholder":189},[154,462,464],{"class":156,"line":463},18,[154,465,466],{"class":344},"# Create a view\n",[154,468,470,472,474,477,479,481,484,486,488,490],{"class":156,"line":469},19,[154,471,351],{"class":164},[154,473,137],{"class":174},[154,475,476],{"class":202},"create_view",[154,478,205],{"class":174},[154,480,208],{"class":174},[154,482,483],{"class":211},"dashboard",[154,485,208],{"class":174},[154,487,175],{"class":174},[154,489,260],{"class":202},[154,491,217],{"class":174},[154,493,495,497,499,502,504,506,508,510,513],{"class":156,"line":494},20,[154,496,351],{"class":164},[154,498,137],{"class":174},[154,500,501],{"class":202},"create_index",[154,503,205],{"class":174},[154,505,208],{"class":174},[154,507,371],{"class":211},[154,509,208],{"class":174},[154,511,512],{"class":174},")",[154,514,515],{"class":344},"  # expression index for fast filtering\n",[112,517,518],{},"This generates:",[116,520,524],{"className":521,"code":522,"language":523,"meta":125,"style":125},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE VIEW monitoring_view_dashboard AS\nSELECT id, name, write_time, edit_time,\n       json_extract(meta, '$.unit') AS unit,\n       json_extract(meta, '$.location') AS location,\n       json_extract(meta, '$.threshold') AS threshold\nFROM monitoring_objects\nWHERE name IN ('Sensor')\n","sql",[123,525,526,540,554,576,596,614,622],{"__ignoreMap":125},[154,527,528,531,534,537],{"class":156,"line":157},[154,529,530],{"class":332},"CREATE",[154,532,533],{"class":332}," VIEW",[154,535,536],{"class":202}," monitoring_view_dashboard",[154,538,539],{"class":332}," AS\n",[154,541,542,545,548,551],{"class":156,"line":186},[154,543,544],{"class":332},"SELECT",[154,546,547],{"class":164}," id, ",[154,549,550],{"class":332},"name",[154,552,553],{"class":164},", write_time, edit_time,\n",[154,555,556,559,562,565,567,570,573],{"class":156,"line":193},[154,557,558],{"class":164},"       json_extract(meta, ",[154,560,561],{"class":174},"'",[154,563,564],{"class":211},"$.unit",[154,566,561],{"class":174},[154,568,569],{"class":164},") ",[154,571,572],{"class":332},"AS",[154,574,575],{"class":164}," unit,\n",[154,577,578,580,582,585,587,589,591,593],{"class":156,"line":220},[154,579,558],{"class":164},[154,581,561],{"class":174},[154,583,584],{"class":211},"$.location",[154,586,561],{"class":174},[154,588,569],{"class":164},[154,590,572],{"class":332},[154,592,385],{"class":332},[154,594,595],{"class":164},",\n",[154,597,598,600,602,605,607,609,611],{"class":156,"line":247},[154,599,558],{"class":164},[154,601,561],{"class":174},[154,603,604],{"class":211},"$.threshold",[154,606,561],{"class":174},[154,608,569],{"class":164},[154,610,572],{"class":332},[154,612,613],{"class":164}," threshold\n",[154,615,616,619],{"class":156,"line":252},[154,617,618],{"class":332},"FROM",[154,620,621],{"class":164}," monitoring_objects\n",[154,623,624,627,630,633,636,638,640,642],{"class":156,"line":271},[154,625,626],{"class":332},"WHERE",[154,628,629],{"class":332}," name",[154,631,632],{"class":332}," IN",[154,634,635],{"class":164}," (",[154,637,561],{"class":174},[154,639,281],{"class":211},[154,641,561],{"class":174},[154,643,217],{"class":164},[112,645,646,647,650],{},"Now query with plain SQL — ",[123,648,649],{},"sql_select"," returns a Polars DataFrame:",[116,652,654],{"className":148,"code":653,"language":150,"meta":125,"style":125},"df = coll.sql_select(\"\"\"\n    SELECT location, threshold\n    FROM monitoring_view_dashboard\n    WHERE unit = 'Celsius' AND threshold > 50\n\"\"\")\nprint(df)\n# ┌──────────┬───────────┐\n# │ location ┆ threshold │\n# │ ---      ┆ ---       │\n# │ str      ┆ f64       │\n# ╞══════════╪═══════════╡\n# │ pelion   ┆ 80.0      │\n# └──────────┴───────────┘\n",[123,655,656,675,680,685,690,697,709,714,719,724,729,734,739],{"__ignoreMap":125},[154,657,658,661,663,666,668,670,672],{"class":156,"line":157},[154,659,660],{"class":164},"df ",[154,662,199],{"class":174},[154,664,665],{"class":164}," coll",[154,667,137],{"class":174},[154,669,649],{"class":202},[154,671,205],{"class":174},[154,673,674],{"class":174},"\"\"\"\n",[154,676,677],{"class":156,"line":186},[154,678,679],{"class":211},"    SELECT location, threshold\n",[154,681,682],{"class":156,"line":193},[154,683,684],{"class":211},"    FROM monitoring_view_dashboard\n",[154,686,687],{"class":156,"line":220},[154,688,689],{"class":211},"    WHERE unit = 'Celsius' AND threshold > 50\n",[154,691,692,695],{"class":156,"line":247},[154,693,694],{"class":174},"\"\"\"",[154,696,217],{"class":174},[154,698,699,702,704,707],{"class":156,"line":252},[154,700,701],{"class":202},"print",[154,703,205],{"class":174},[154,705,706],{"class":202},"df",[154,708,217],{"class":174},[154,710,711],{"class":156,"line":271},[154,712,713],{"class":344},"# ┌──────────┬───────────┐\n",[154,715,716],{"class":156,"line":287},[154,717,718],{"class":344},"# │ location ┆ threshold │\n",[154,720,721],{"class":156,"line":305},[154,722,723],{"class":344},"# │ ---      ┆ ---       │\n",[154,725,726],{"class":156,"line":319},[154,727,728],{"class":344},"# │ str      ┆ f64       │\n",[154,730,731],{"class":156,"line":336},[154,732,733],{"class":344},"# ╞══════════╪═══════════╡\n",[154,735,736],{"class":156,"line":341},[154,737,738],{"class":344},"# │ pelion   ┆ 80.0      │\n",[154,740,741],{"class":156,"line":348},[154,742,743],{"class":344},"# └──────────┴───────────┘\n",[139,745,747],{"id":746},"choosing-a-view-name","Choosing a view name",[112,749,750,751,753,754,757,758,762],{},"The name you pass to ",[123,752,476],{}," is combined with the collection name to form the SQL view: ",[123,755,756],{},"{collection}_view_{name}",". The name should describe ",[759,760,761],"strong",{},"what the view is for"," — a use case, a consumer, or a subset — not the model type (the model is already a parameter).",[116,764,766],{"className":148,"code":765,"language":150,"meta":125,"style":125},"# Good — describes the purpose\ncoll.create_view(\"dashboard\", Sensor)        # research_view_dashboard\ncoll.create_view(\"lite\", Sensor)             # research_view_lite\ncoll.create_view(\"export\", Sensor, Alert)    # research_view_export\n\n# Bad — repeats the model name\ncoll.create_view(\"sensor\", Sensor)           # research_view_sensor — redundant\ncoll.create_view(\"all_data\", Sensor)         # vague\n",[123,767,768,773,798,824,855,859,864,890],{"__ignoreMap":125},[154,769,770],{"class":156,"line":157},[154,771,772],{"class":344},"# Good — describes the purpose\n",[154,774,775,777,779,781,783,785,787,789,791,793,795],{"class":156,"line":186},[154,776,351],{"class":164},[154,778,137],{"class":174},[154,780,476],{"class":202},[154,782,205],{"class":174},[154,784,208],{"class":174},[154,786,483],{"class":211},[154,788,208],{"class":174},[154,790,175],{"class":174},[154,792,260],{"class":202},[154,794,512],{"class":174},[154,796,797],{"class":344},"        # research_view_dashboard\n",[154,799,800,802,804,806,808,810,813,815,817,819,821],{"class":156,"line":193},[154,801,351],{"class":164},[154,803,137],{"class":174},[154,805,476],{"class":202},[154,807,205],{"class":174},[154,809,208],{"class":174},[154,811,812],{"class":211},"lite",[154,814,208],{"class":174},[154,816,175],{"class":174},[154,818,260],{"class":202},[154,820,512],{"class":174},[154,822,823],{"class":344},"             # research_view_lite\n",[154,825,826,828,830,832,834,836,839,841,843,845,847,850,852],{"class":156,"line":220},[154,827,351],{"class":164},[154,829,137],{"class":174},[154,831,476],{"class":202},[154,833,205],{"class":174},[154,835,208],{"class":174},[154,837,838],{"class":211},"export",[154,840,208],{"class":174},[154,842,175],{"class":174},[154,844,260],{"class":202},[154,846,175],{"class":174},[154,848,849],{"class":202}," Alert",[154,851,512],{"class":174},[154,853,854],{"class":344},"    # research_view_export\n",[154,856,857],{"class":156,"line":247},[154,858,190],{"emptyLinePlaceholder":189},[154,860,861],{"class":156,"line":252},[154,862,863],{"class":344},"# Bad — repeats the model name\n",[154,865,866,868,870,872,874,876,879,881,883,885,887],{"class":156,"line":271},[154,867,351],{"class":164},[154,869,137],{"class":174},[154,871,476],{"class":202},[154,873,205],{"class":174},[154,875,208],{"class":174},[154,877,878],{"class":211},"sensor",[154,880,208],{"class":174},[154,882,175],{"class":174},[154,884,260],{"class":202},[154,886,512],{"class":174},[154,888,889],{"class":344},"           # research_view_sensor — redundant\n",[154,891,892,894,896,898,900,902,905,907,909,911,913],{"class":156,"line":287},[154,893,351],{"class":164},[154,895,137],{"class":174},[154,897,476],{"class":202},[154,899,205],{"class":174},[154,901,208],{"class":174},[154,903,904],{"class":211},"all_data",[154,906,208],{"class":174},[154,908,175],{"class":174},[154,910,260],{"class":202},[154,912,512],{"class":174},[154,914,915],{"class":344},"         # vague\n",[112,917,918,919,922],{},"Same naming rules as collections: ",[123,920,921],{},"[a-z][a-z0-9_]*"," — lowercase, starts with a letter.",[112,924,925],{},"Multiple views on the same collection are fine. Use them to serve different consumers (a dashboard view with a few columns, an export view with all columns, a monitoring view spanning multiple model types).",[139,927,929],{"id":928},"indexing-fields-for-performance","Indexing fields for performance",[112,931,932,933,293],{},"Views are virtual — they cannot be indexed directly. To speed up queries against a view, create indexes on the underlying objects table via ",[123,934,935],{},"create_index()",[116,937,939],{"className":148,"code":938,"language":150,"meta":125,"style":125},"coll.create_index(\"unit\")\ncoll.create_index(\"location\")\n",[123,940,941,959],{"__ignoreMap":125},[154,942,943,945,947,949,951,953,955,957],{"class":156,"line":157},[154,944,351],{"class":164},[154,946,137],{"class":174},[154,948,501],{"class":202},[154,950,205],{"class":174},[154,952,208],{"class":174},[154,954,371],{"class":211},[154,956,208],{"class":174},[154,958,217],{"class":174},[154,960,961,963,965,967,969,971,974,976],{"class":156,"line":186},[154,962,351],{"class":164},[154,964,137],{"class":174},[154,966,501],{"class":202},[154,968,205],{"class":174},[154,970,208],{"class":174},[154,972,973],{"class":211},"location",[154,975,208],{"class":174},[154,977,217],{"class":174},[112,979,980],{},"This creates indexes like:",[116,982,984],{"className":521,"code":983,"language":523,"meta":125,"style":125},"CREATE INDEX idx_monitoring_unit ON monitoring_objects (json_extract(meta, '$.unit'))\nCREATE INDEX idx_monitoring_location ON monitoring_objects (json_extract(meta, '$.location'))\n",[123,985,986,1011],{"__ignoreMap":125},[154,987,988,990,993,996,999,1002,1004,1006,1008],{"class":156,"line":157},[154,989,530],{"class":332},[154,991,992],{"class":332}," INDEX",[154,994,995],{"class":202}," idx_monitoring_unit",[154,997,998],{"class":332}," ON",[154,1000,1001],{"class":164}," monitoring_objects (json_extract(meta, ",[154,1003,561],{"class":174},[154,1005,564],{"class":211},[154,1007,561],{"class":174},[154,1009,1010],{"class":164},"))\n",[154,1012,1013,1015,1017,1020,1022,1024,1026,1028,1030],{"class":156,"line":186},[154,1014,530],{"class":332},[154,1016,992],{"class":332},[154,1018,1019],{"class":202}," idx_monitoring_location",[154,1021,998],{"class":332},[154,1023,1001],{"class":164},[154,1025,561],{"class":174},[154,1027,584],{"class":211},[154,1029,561],{"class":174},[154,1031,1010],{"class":164},[1033,1034,1035,1036,1039,1040,1043,1044,1047],"callout",{"icon":14},"Indexes and views are ",[759,1037,1038],{},"independent",". Indexes live on the ",[759,1041,1042],{},"objects table",", not on the view. Dropping or refreshing a view does not affect indexes, and dropping an index does not affect views. An index speeds up both view queries and ",[123,1045,1046],{},"read_objects"," calls on the same field.",[112,1049,1050,1051,1055],{},"See the ",[1052,1053,79],"a",{"href":1054},"/advanced/performance#index-fields"," for index tuning strategies.",[139,1057,1059,1060],{"id":1058},"restricting-columns-with-include_fields","Restricting columns with ",[123,1061,1062],{},"include_fields",[112,1064,1065,1066,1069],{},"By default the view exposes every field on the model. On wide models, restrict the view to only the fields you need — this means fewer ",[123,1067,1068],{},"json_extract()"," calls per row:",[116,1071,1073],{"className":148,"code":1072,"language":150,"meta":125,"style":125},"coll.create_view(\n    \"lite\",\n    Sensor,\n    include_fields=[\"unit\", \"location\"],  # threshold is omitted\n)\n",[123,1074,1075,1086,1097,1103,1131],{"__ignoreMap":125},[154,1076,1077,1079,1081,1083],{"class":156,"line":157},[154,1078,351],{"class":164},[154,1080,137],{"class":174},[154,1082,476],{"class":202},[154,1084,1085],{"class":174},"(\n",[154,1087,1088,1091,1093,1095],{"class":156,"line":186},[154,1089,1090],{"class":174},"    \"",[154,1092,812],{"class":211},[154,1094,208],{"class":174},[154,1096,595],{"class":174},[154,1098,1099,1101],{"class":156,"line":193},[154,1100,365],{"class":202},[154,1102,595],{"class":174},[154,1104,1105,1108,1111,1113,1115,1117,1119,1121,1123,1125,1128],{"class":156,"line":220},[154,1106,1107],{"class":370},"    include_fields",[154,1109,1110],{"class":174},"=[",[154,1112,208],{"class":174},[154,1114,371],{"class":211},[154,1116,208],{"class":174},[154,1118,175],{"class":174},[154,1120,237],{"class":174},[154,1122,973],{"class":211},[154,1124,208],{"class":174},[154,1126,1127],{"class":174},"],",[154,1129,1130],{"class":344},"  # threshold is omitted\n",[154,1132,1133],{"class":156,"line":247},[154,1134,217],{"class":174},[112,1136,1137,1138,1140],{},"Pair with ",[123,1139,935],{}," for maximum impact:",[116,1142,1144],{"className":148,"code":1143,"language":150,"meta":125,"style":125},"coll.create_view(\n    \"lite\",\n    Sensor,\n    include_fields=[\"unit\", \"location\"],\n)\ncoll.create_index(\"unit\")\n",[123,1145,1146,1156,1166,1172,1195,1199],{"__ignoreMap":125},[154,1147,1148,1150,1152,1154],{"class":156,"line":157},[154,1149,351],{"class":164},[154,1151,137],{"class":174},[154,1153,476],{"class":202},[154,1155,1085],{"class":174},[154,1157,1158,1160,1162,1164],{"class":156,"line":186},[154,1159,1090],{"class":174},[154,1161,812],{"class":211},[154,1163,208],{"class":174},[154,1165,595],{"class":174},[154,1167,1168,1170],{"class":156,"line":193},[154,1169,365],{"class":202},[154,1171,595],{"class":174},[154,1173,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192],{"class":156,"line":220},[154,1175,1107],{"class":370},[154,1177,1110],{"class":174},[154,1179,208],{"class":174},[154,1181,371],{"class":211},[154,1183,208],{"class":174},[154,1185,175],{"class":174},[154,1187,237],{"class":174},[154,1189,973],{"class":211},[154,1191,208],{"class":174},[154,1193,1194],{"class":174},"],\n",[154,1196,1197],{"class":156,"line":247},[154,1198,217],{"class":174},[154,1200,1201,1203,1205,1207,1209,1211,1213,1215],{"class":156,"line":252},[154,1202,351],{"class":164},[154,1204,137],{"class":174},[154,1206,501],{"class":202},[154,1208,205],{"class":174},[154,1210,208],{"class":174},[154,1212,371],{"class":211},[154,1214,208],{"class":174},[154,1216,217],{"class":174},[112,1218,1219,1220,1223],{},"Renamed fields in the subset still generate the correct ",[123,1221,1222],{},"COALESCE"," expression, so old JSON keys remain readable:",[116,1225,1227],{"className":148,"code":1226,"language":150,"meta":125,"style":125},"from centaurodb import renamed_from\n\nclass Sensor(CentauroModel):\n    __centauro_name__ = \"Sensor\"\n    temperature: float = renamed_from(\"temp\", default=0.0)\n    location: str = \"\"\n\n# View includes only 'temperature'; old rows with {\"temp\":…} are still readable\ncoll.create_view(\"lite\", Sensor, include_fields=[\"temperature\"])\n",[123,1228,1229,1240,1244,1256,1268,1303,1315,1319,1324],{"__ignoreMap":125},[154,1230,1231,1233,1235,1237],{"class":156,"line":157},[154,1232,161],{"class":160},[154,1234,165],{"class":164},[154,1236,168],{"class":160},[154,1238,1239],{"class":164}," renamed_from\n",[154,1241,1242],{"class":156,"line":186},[154,1243,190],{"emptyLinePlaceholder":189},[154,1245,1246,1248,1250,1252,1254],{"class":156,"line":193},[154,1247,256],{"class":255},[154,1249,260],{"class":259},[154,1251,205],{"class":174},[154,1253,265],{"class":259},[154,1255,268],{"class":174},[154,1257,1258,1260,1262,1264,1266],{"class":156,"line":220},[154,1259,274],{"class":164},[154,1261,199],{"class":174},[154,1263,237],{"class":174},[154,1265,281],{"class":211},[154,1267,284],{"class":174},[154,1269,1270,1273,1275,1277,1279,1282,1284,1286,1289,1291,1293,1296,1298,1301],{"class":156,"line":247},[154,1271,1272],{"class":164},"    temperature",[154,1274,293],{"class":174},[154,1276,327],{"class":259},[154,1278,299],{"class":174},[154,1280,1281],{"class":202}," renamed_from",[154,1283,205],{"class":174},[154,1285,208],{"class":174},[154,1287,1288],{"class":211},"temp",[154,1290,208],{"class":174},[154,1292,175],{"class":174},[154,1294,1295],{"class":370}," default",[154,1297,199],{"class":174},[154,1299,1300],{"class":332},"0.0",[154,1302,217],{"class":174},[154,1304,1305,1307,1309,1311,1313],{"class":156,"line":252},[154,1306,308],{"class":164},[154,1308,293],{"class":174},[154,1310,296],{"class":259},[154,1312,299],{"class":174},[154,1314,302],{"class":174},[154,1316,1317],{"class":156,"line":271},[154,1318,190],{"emptyLinePlaceholder":189},[154,1320,1321],{"class":156,"line":287},[154,1322,1323],{"class":344},"# View includes only 'temperature'; old rows with {\"temp\":…} are still readable\n",[154,1325,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1349,1351,1353,1356,1358],{"class":156,"line":305},[154,1327,351],{"class":164},[154,1329,137],{"class":174},[154,1331,476],{"class":202},[154,1333,205],{"class":174},[154,1335,208],{"class":174},[154,1337,812],{"class":211},[154,1339,208],{"class":174},[154,1341,175],{"class":174},[154,1343,260],{"class":202},[154,1345,175],{"class":174},[154,1347,1348],{"class":370}," include_fields",[154,1350,1110],{"class":174},[154,1352,208],{"class":174},[154,1354,1355],{"class":211},"temperature",[154,1357,208],{"class":174},[154,1359,455],{"class":174},[139,1361,1363],{"id":1362},"multi-model-views","Multi-model views",[112,1365,1366],{},"Store different model types in the same collection and create a single view spanning all of them:",[116,1368,1370],{"className":148,"code":1369,"language":150,"meta":125,"style":125},"class Alert(CentauroModel):\n    __centauro_name__ = \"Alert\"\n    level: int = 0\n    message: str = \"\"\n\n# Same collection — Sensor and Alert share the monitoring_objects table\ncoll.write_object(Sensor(unit=\"C\", location=\"pelion\"))\ncoll.write_object(Alert(level=3, message=\"Hydra spotted near Lerna\"))\n\ncoll.create_view(\"all\", Sensor, Alert)\n",[123,1371,1372,1384,1397,1412,1425,1429,1434,1474,1512,1516],{"__ignoreMap":125},[154,1373,1374,1376,1378,1380,1382],{"class":156,"line":157},[154,1375,256],{"class":255},[154,1377,849],{"class":259},[154,1379,205],{"class":174},[154,1381,265],{"class":259},[154,1383,268],{"class":174},[154,1385,1386,1388,1390,1392,1395],{"class":156,"line":186},[154,1387,274],{"class":164},[154,1389,199],{"class":174},[154,1391,237],{"class":174},[154,1393,1394],{"class":211},"Alert",[154,1396,284],{"class":174},[154,1398,1399,1402,1404,1407,1409],{"class":156,"line":193},[154,1400,1401],{"class":164},"    level",[154,1403,293],{"class":174},[154,1405,1406],{"class":259}," int",[154,1408,299],{"class":174},[154,1410,1411],{"class":332}," 0\n",[154,1413,1414,1417,1419,1421,1423],{"class":156,"line":220},[154,1415,1416],{"class":164},"    message",[154,1418,293],{"class":174},[154,1420,296],{"class":259},[154,1422,299],{"class":174},[154,1424,302],{"class":174},[154,1426,1427],{"class":156,"line":247},[154,1428,190],{"emptyLinePlaceholder":189},[154,1430,1431],{"class":156,"line":252},[154,1432,1433],{"class":344},"# Same collection — Sensor and Alert share the monitoring_objects table\n",[154,1435,1436,1438,1440,1443,1445,1447,1449,1451,1453,1455,1458,1460,1462,1464,1466,1468,1470,1472],{"class":156,"line":271},[154,1437,351],{"class":164},[154,1439,137],{"class":174},[154,1441,1442],{"class":202},"write_object",[154,1444,205],{"class":174},[154,1446,281],{"class":202},[154,1448,205],{"class":174},[154,1450,371],{"class":370},[154,1452,199],{"class":174},[154,1454,208],{"class":174},[154,1456,1457],{"class":211},"C",[154,1459,208],{"class":174},[154,1461,175],{"class":174},[154,1463,385],{"class":370},[154,1465,199],{"class":174},[154,1467,208],{"class":174},[154,1469,392],{"class":211},[154,1471,208],{"class":174},[154,1473,1010],{"class":174},[154,1475,1476,1478,1480,1482,1484,1486,1488,1491,1493,1496,1498,1501,1503,1505,1508,1510],{"class":156,"line":287},[154,1477,351],{"class":164},[154,1479,137],{"class":174},[154,1481,1442],{"class":202},[154,1483,205],{"class":174},[154,1485,1394],{"class":202},[154,1487,205],{"class":174},[154,1489,1490],{"class":370},"level",[154,1492,199],{"class":174},[154,1494,1495],{"class":332},"3",[154,1497,175],{"class":174},[154,1499,1500],{"class":370}," message",[154,1502,199],{"class":174},[154,1504,208],{"class":174},[154,1506,1507],{"class":211},"Hydra spotted near Lerna",[154,1509,208],{"class":174},[154,1511,1010],{"class":174},[154,1513,1514],{"class":156,"line":305},[154,1515,190],{"emptyLinePlaceholder":189},[154,1517,1518,1520,1522,1524,1526,1528,1531,1533,1535,1537,1539,1541],{"class":156,"line":319},[154,1519,351],{"class":164},[154,1521,137],{"class":174},[154,1523,476],{"class":202},[154,1525,205],{"class":174},[154,1527,208],{"class":174},[154,1529,1530],{"class":211},"all",[154,1532,208],{"class":174},[154,1534,175],{"class":174},[154,1536,260],{"class":202},[154,1538,175],{"class":174},[154,1540,849],{"class":202},[154,1542,217],{"class":174},[112,1544,1545],{},"In the resulting view:",[1547,1548,1549,1568],"ul",{},[1550,1551,1552,1553,1555,1556,1558,1559,1562,1563,1555,1565],"li",{},"Sensor rows have ",[123,1554,371],{}," and ",[123,1557,973],{}," populated, ",[123,1560,1561],{},"NULL"," for ",[123,1564,1490],{},[123,1566,1567],{},"message",[1550,1569,1570,1571,1555,1573,1558,1575,1562,1577,1555,1579],{},"Alert rows have ",[123,1572,1490],{},[123,1574,1567],{},[123,1576,1561],{},[123,1578,371],{},[123,1580,973],{},[112,1582,1583],{},"This is useful for dashboards that display a unified log of different event types.",[139,1585,1587],{"id":1586},"refreshing-a-view","Refreshing a view",[112,1589,1590],{},"After changing your model (adding, removing, or renaming fields), refresh the view to update its columns:",[116,1592,1594],{"className":148,"code":1593,"language":150,"meta":125,"style":125},"coll.refresh_view(\"dashboard\", Sensor)\n",[123,1595,1596],{"__ignoreMap":125},[154,1597,1598,1600,1602,1605,1607,1609,1611,1613,1615,1617],{"class":156,"line":157},[154,1599,351],{"class":164},[154,1601,137],{"class":174},[154,1603,1604],{"class":202},"refresh_view",[154,1606,205],{"class":174},[154,1608,208],{"class":174},[154,1610,483],{"class":211},[154,1612,208],{"class":174},[154,1614,175],{"class":174},[154,1616,260],{"class":202},[154,1618,217],{"class":174},[112,1620,1621,1622,1624,1625,1627,1628,1631],{},"When you omit ",[123,1623,1062],{},", ",[123,1626,1604],{}," introspects the existing view and reuses its current column configuration. It also translates renamed fields automatically — if a column was created under the old name and you've since used ",[123,1629,1630],{},"renamed_from()",", the refreshed view maps to the new name.",[112,1633,1634],{},"To explicitly change the column set, pass a new list:",[116,1636,1638],{"className":148,"code":1637,"language":150,"meta":125,"style":125},"coll.refresh_view(\n    \"dashboard\",\n    Sensor,\n    include_fields=[\"unit\", \"location\", \"temperature\"],\n)\n",[123,1639,1640,1650,1660,1666,1696],{"__ignoreMap":125},[154,1641,1642,1644,1646,1648],{"class":156,"line":157},[154,1643,351],{"class":164},[154,1645,137],{"class":174},[154,1647,1604],{"class":202},[154,1649,1085],{"class":174},[154,1651,1652,1654,1656,1658],{"class":156,"line":186},[154,1653,1090],{"class":174},[154,1655,483],{"class":211},[154,1657,208],{"class":174},[154,1659,595],{"class":174},[154,1661,1662,1664],{"class":156,"line":193},[154,1663,365],{"class":202},[154,1665,595],{"class":174},[154,1667,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694],{"class":156,"line":220},[154,1669,1107],{"class":370},[154,1671,1110],{"class":174},[154,1673,208],{"class":174},[154,1675,371],{"class":211},[154,1677,208],{"class":174},[154,1679,175],{"class":174},[154,1681,237],{"class":174},[154,1683,973],{"class":211},[154,1685,208],{"class":174},[154,1687,175],{"class":174},[154,1689,237],{"class":174},[154,1691,1355],{"class":211},[154,1693,208],{"class":174},[154,1695,1194],{"class":174},[154,1697,1698],{"class":156,"line":247},[154,1699,217],{"class":174},[1033,1701,1702,1703,1706],{"icon":14},"You only need to refresh views when the ",[759,1704,1705],{},"model definition"," changes (fields added/removed/renamed). Normal data operations (writes, updates, deletes) are reflected in views automatically — they read live data from the underlying table.",[139,1708,1710],{"id":1709},"inspecting-views","Inspecting views",[112,1712,1713],{},"List all views in a collection and their columns:",[116,1715,1717],{"className":148,"code":1716,"language":150,"meta":125,"style":125},"coll.describe_views()\n# {'monitoring_view_dashboard': ['unit', 'location', 'threshold']}\n",[123,1718,1719,1731],{"__ignoreMap":125},[154,1720,1721,1723,1725,1728],{"class":156,"line":157},[154,1722,351],{"class":164},[154,1724,137],{"class":174},[154,1726,1727],{"class":202},"describe_views",[154,1729,1730],{"class":174},"()\n",[154,1732,1733],{"class":156,"line":186},[154,1734,1735],{"class":344},"# {'monitoring_view_dashboard': ['unit', 'location', 'threshold']}\n",[139,1737,1739],{"id":1738},"overwriting-a-view","Overwriting a view",[112,1741,1742,1743,1746,1747,1750,1751,1754],{},"By default, ",[123,1744,1745],{},"create_view()"," raises ",[123,1748,1749],{},"ViewAlreadyExistsError"," if the view name is already taken. Pass ",[123,1752,1753],{},"overwrite=True"," to replace it:",[116,1756,1758],{"className":148,"code":1757,"language":150,"meta":125,"style":125},"coll.create_view(\"dashboard\", Sensor, overwrite=True)\n",[123,1759,1760],{"__ignoreMap":125},[154,1761,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1785],{"class":156,"line":157},[154,1763,351],{"class":164},[154,1765,137],{"class":174},[154,1767,476],{"class":202},[154,1769,205],{"class":174},[154,1771,208],{"class":174},[154,1773,483],{"class":211},[154,1775,208],{"class":174},[154,1777,175],{"class":174},[154,1779,260],{"class":202},[154,1781,175],{"class":174},[154,1783,1784],{"class":370}," overwrite",[154,1786,1787],{"class":174},"=True)\n",[139,1789,1791],{"id":1790},"standalone-indexes","Standalone indexes",[112,1793,1794,1795,1797],{},"You can create and manage indexes independently of views. This is useful when you want to speed up ",[123,1796,1046],{}," queries without creating a SQL view.",[1799,1800,1801],"h3",{"id":501},[123,1802,501],{},[112,1804,1805],{},"Idempotent — safe to call on every application startup. CentauroDB automatically picks the correct index type:",[1547,1807,1808,1825],{},[1550,1809,1810,1813,1814,1624,1817,1624,1819,1624,1822],{},[759,1811,1812],{},"Plain column index"," for built-in fields: ",[123,1815,1816],{},"id",[123,1818,550],{},[123,1820,1821],{},"write_time",[123,1823,1824],{},"edit_time",[1550,1826,1827,1830,1831,1834],{},[759,1828,1829],{},"JSON expression index"," for all other names (fields stored in the ",[123,1832,1833],{},"meta"," JSON blob)",[116,1836,1838],{"className":148,"code":1837,"language":150,"meta":125,"style":125},"coll.create_index(\"unit\")        # json_extract expression index\ncoll.create_index(\"write_time\")  # plain column index\n",[123,1839,1840,1861],{"__ignoreMap":125},[154,1841,1842,1844,1846,1848,1850,1852,1854,1856,1858],{"class":156,"line":157},[154,1843,351],{"class":164},[154,1845,137],{"class":174},[154,1847,501],{"class":202},[154,1849,205],{"class":174},[154,1851,208],{"class":174},[154,1853,371],{"class":211},[154,1855,208],{"class":174},[154,1857,512],{"class":174},[154,1859,1860],{"class":344},"        # json_extract expression index\n",[154,1862,1863,1865,1867,1869,1871,1873,1875,1877,1879],{"class":156,"line":186},[154,1864,351],{"class":164},[154,1866,137],{"class":174},[154,1868,501],{"class":202},[154,1870,205],{"class":174},[154,1872,208],{"class":174},[154,1874,1821],{"class":211},[154,1876,208],{"class":174},[154,1878,512],{"class":174},[154,1880,1881],{"class":344},"  # plain column index\n",[1799,1883,1885],{"id":1884},"drop_index",[123,1886,1884],{},[112,1888,1889,1890,1892],{},"Drops an index by field name. Silent if the index doesn't exist. The auto-managed ",[123,1891,550],{}," index cannot be dropped.",[116,1894,1896],{"className":148,"code":1895,"language":150,"meta":125,"style":125},"coll.drop_index(\"unit\")          # drops idx_monitoring_unit\ncoll.drop_index(\"old_field\")     # no-op if already gone\n",[123,1897,1898,1919],{"__ignoreMap":125},[154,1899,1900,1902,1904,1906,1908,1910,1912,1914,1916],{"class":156,"line":157},[154,1901,351],{"class":164},[154,1903,137],{"class":174},[154,1905,1884],{"class":202},[154,1907,205],{"class":174},[154,1909,208],{"class":174},[154,1911,371],{"class":211},[154,1913,208],{"class":174},[154,1915,512],{"class":174},[154,1917,1918],{"class":344},"          # drops idx_monitoring_unit\n",[154,1920,1921,1923,1925,1927,1929,1931,1934,1936,1938],{"class":156,"line":186},[154,1922,351],{"class":164},[154,1924,137],{"class":174},[154,1926,1884],{"class":202},[154,1928,205],{"class":174},[154,1930,208],{"class":174},[154,1932,1933],{"class":211},"old_field",[154,1935,208],{"class":174},[154,1937,512],{"class":174},[154,1939,1940],{"class":344},"     # no-op if already gone\n",[1799,1942,1944],{"id":1943},"list_indexes",[123,1945,1943],{},[112,1947,1948,1949,1951],{},"Returns all user-managed indexes on the collection. The internal ",[123,1950,550],{}," index is always excluded.",[116,1953,1955],{"className":148,"code":1954,"language":150,"meta":125,"style":125},"coll.list_indexes()\n# ['unit', 'write_time']\n\ncoll.list_indexes(raw=True)\n# ['idx_monitoring_unit', 'idx_monitoring_write_time']\n",[123,1956,1957,1967,1972,1976,1991],{"__ignoreMap":125},[154,1958,1959,1961,1963,1965],{"class":156,"line":157},[154,1960,351],{"class":164},[154,1962,137],{"class":174},[154,1964,1943],{"class":202},[154,1966,1730],{"class":174},[154,1968,1969],{"class":156,"line":186},[154,1970,1971],{"class":344},"# ['unit', 'write_time']\n",[154,1973,1974],{"class":156,"line":193},[154,1975,190],{"emptyLinePlaceholder":189},[154,1977,1978,1980,1982,1984,1986,1989],{"class":156,"line":220},[154,1979,351],{"class":164},[154,1981,137],{"class":174},[154,1983,1943],{"class":202},[154,1985,205],{"class":174},[154,1987,1988],{"class":370},"raw",[154,1990,1787],{"class":174},[154,1992,1993],{"class":156,"line":247},[154,1994,1995],{"class":344},"# ['idx_monitoring_unit', 'idx_monitoring_write_time']\n",[1033,1997,1998,1999,2002,2003,137],{"icon":14},"All indexes share the same naming convention (",[123,2000,2001],{},"idx_{collection}_{field}",") and appear in ",[123,2004,2005],{},"list_indexes()",[2007,2008,2009],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":125,"searchDepth":186,"depth":186,"links":2011},[2012,2013,2014,2015,2017,2018,2019,2020,2021],{"id":141,"depth":186,"text":142},{"id":746,"depth":186,"text":747},{"id":928,"depth":186,"text":929},{"id":1058,"depth":186,"text":2016},"Restricting columns with include_fields",{"id":1362,"depth":186,"text":1363},{"id":1586,"depth":186,"text":1587},{"id":1709,"depth":186,"text":1710},{"id":1738,"depth":186,"text":1739},{"id":1790,"depth":186,"text":1791,"children":2022},[2023,2024,2025],{"id":501,"depth":193,"text":501},{"id":1884,"depth":193,"text":1884},{"id":1943,"depth":193,"text":1943},"Turn JSON blobs into queryable SQL columns with auto-generated views and indexes.","md",null,{},{"icon":46},{"title":43,"description":2026},"KPQEcEVYSieIzP8M_OD8o_Dl9Dl3Iu0vHjOciKicBS4",[2034,2036],{"title":38,"path":39,"stem":40,"description":2035,"icon":41,"children":-1},"Store, read, update, and query your models with Collection and TimeSeriesCollection.",{"title":48,"path":49,"stem":50,"description":2037,"icon":51,"children":-1},"Add, remove, and rename fields without migrations — just update your Python class and redeploy.",1781105062018]