[{"data":1,"prerenderedAt":1206},["ShallowReactive",2],{"navigation":3,"/docs/database/migrations":137,"/docs/database/migrations-surround":1201},[4,123],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":113},"Docs","i-lucide-book","/docs","docs",[10,34,58,73,84,95,114],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[15,17,21,25,29],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":22,"path":23,"stem":24},"Deploy","/docs/getting-started/deploy","docs/1.getting-started/3.deploy",{"title":26,"path":27,"stem":28},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration",{"title":30,"path":31,"stem":32},"Environments","/docs/getting-started/environments","docs/1.getting-started/5.environments","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":57},"Database","/docs/database","docs/2.database/1.index",[39,41,45,49,53],{"title":40,"path":36,"stem":37},"Setup",{"title":42,"path":43,"stem":44},"Schema","/docs/database/schema","docs/2.database/2.schema",{"title":46,"path":47,"stem":48},"Queries","/docs/database/query","docs/2.database/3.query",{"title":50,"path":51,"stem":52},"Migrations","/docs/database/migrations","docs/2.database/4.migrations",{"title":54,"path":55,"stem":56},"CLI","/docs/database/cli","docs/2.database/cli","i-lucide-database",{"title":59,"path":60,"stem":61,"children":62,"icon":72},"Blob","/docs/blob","docs/3.blob/1.index",[63,64,68],{"title":40,"path":60,"stem":61},{"title":65,"path":66,"stem":67},"Upload","/docs/blob/upload","docs/3.blob/2.upload",{"title":69,"path":70,"stem":71},"Blob SDK","/docs/blob/usage","docs/3.blob/3.usage","i-lucide-shapes",{"title":74,"path":75,"stem":76,"children":77,"icon":83},"Key Value","/docs/kv","docs/4.kv/1.index",[78,79],{"title":40,"path":75,"stem":76},{"title":80,"path":81,"stem":82},"KV SDK","/docs/kv/usage","docs/4.kv/2.usage","i-lucide-list",{"title":85,"path":86,"stem":87,"children":88,"icon":94},"Cache","/docs/cache","docs/5.cache/1.index",[89,90],{"title":40,"path":86,"stem":87},{"title":91,"path":92,"stem":93},"Usage","/docs/cache/usage","docs/5.cache/2.usage","i-lucide-zap",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":113},"Guides","i-lucide-book-text","/docs/guides","docs/6.guides",[101,105,109],{"title":102,"path":103,"stem":104},"Pre-rendering","/docs/guides/pre-rendering","docs/6.guides/1.pre-rendering",{"title":106,"path":107,"stem":108},"Realtime","/docs/guides/realtime","docs/6.guides/2.realtime",{"title":110,"path":111,"stem":112},"CI/CD","/docs/guides/ci-cd","docs/6.guides/3.ci-cd",false,{"title":115,"path":116,"stem":117,"children":118,"page":113},"Reference","/docs/reference","docs/7.reference",[119],{"title":120,"path":121,"stem":122},"Environment Variables","/docs/reference/environment-variables","docs/7.reference/1.environment-variables",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":113},"Changelog","i-lucide-megaphone","/changelog","changelog",[129,133],{"title":130,"path":131,"stem":132},"NuxtHub Multi-Vendor is now available","/changelog/nuxthub-multi-vendor","changelog/nuxthub-multi-vendor",{"title":134,"path":135,"stem":136},"Self-Hosting First & Cloud-Agnostic Future","/changelog/self-hosting-first","changelog/self-hosting-first",{"id":138,"title":139,"body":140,"description":1194,"extension":1195,"links":1196,"meta":1197,"navigation":1198,"path":51,"seo":1199,"stem":52,"__hash__":1200},"docs/docs/2.database/4.migrations.md","Database Migrations",{"type":141,"value":142,"toc":1186},"minimark",[143,152,164,169,184,187,315,322,618,626,631,634,650,657,666,764,768,771,793,800,804,807,823,826,829,833,837,844,851,1108,1114,1118,1121,1172,1182],[144,145,146,147,151],"p",{},"Database migrations provide version control for your database schema. NuxtHub supports SQL migration files (",[148,149,150],"code",{},".sql",") and automatically applies them during development and deployment. Making them fully compatible with Drizzle Kit generated migrations.",[153,154,155,156,159,160,163],"note",{},"Create dialect-specific migrations with ",[148,157,158],{},".\u003Cdialect>.sql"," suffix (e.g., ",[148,161,162],{},"0001_create-todos.postgresql.sql",").",[165,166,168],"h3",{"id":167},"migrations-directories","Migrations Directories",[144,170,171,172,175,176,183],{},"NuxtHub scans ",[148,173,174],{},"server/db/migrations"," for migrations in each ",[177,178,182],"a",{"href":179,"rel":180},"https://nuxt.com/docs/getting-started/layers",[181],"nofollow","Nuxt layer",".",[144,185,186],{},"To scan additional directories, specify them in your config:",[188,189,195],"pre",{"className":190,"code":191,"filename":192,"language":193,"meta":194,"style":194},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  hub: {\n    db: {\n      dialect: 'postgresql',\n      migrationsDirs: [\n        'server/db/custom-migrations/'\n      ]\n    }\n  }\n})\n","nuxt.config.ts","ts","",[148,196,197,221,234,244,265,276,288,294,300,306],{"__ignoreMap":194},[198,199,202,206,209,213,217],"span",{"class":200,"line":201},"line",1,[198,203,205],{"class":204},"s7zQu","export",[198,207,208],{"class":204}," default",[198,210,212],{"class":211},"s2Zo4"," defineNuxtConfig",[198,214,216],{"class":215},"sTEyZ","(",[198,218,220],{"class":219},"sMK4o","{\n",[198,222,224,228,231],{"class":200,"line":223},2,[198,225,227],{"class":226},"swJcz","  hub",[198,229,230],{"class":219},":",[198,232,233],{"class":219}," {\n",[198,235,237,240,242],{"class":200,"line":236},3,[198,238,239],{"class":226},"    db",[198,241,230],{"class":219},[198,243,233],{"class":219},[198,245,247,250,252,255,259,262],{"class":200,"line":246},4,[198,248,249],{"class":226},"      dialect",[198,251,230],{"class":219},[198,253,254],{"class":219}," '",[198,256,258],{"class":257},"sfazB","postgresql",[198,260,261],{"class":219},"'",[198,263,264],{"class":219},",\n",[198,266,268,271,273],{"class":200,"line":267},5,[198,269,270],{"class":226},"      migrationsDirs",[198,272,230],{"class":219},[198,274,275],{"class":215}," [\n",[198,277,279,282,285],{"class":200,"line":278},6,[198,280,281],{"class":219},"        '",[198,283,284],{"class":257},"server/db/custom-migrations/",[198,286,287],{"class":219},"'\n",[198,289,291],{"class":200,"line":290},7,[198,292,293],{"class":215},"      ]\n",[198,295,297],{"class":200,"line":296},8,[198,298,299],{"class":219},"    }\n",[198,301,303],{"class":200,"line":302},9,[198,304,305],{"class":219},"  }\n",[198,307,309,312],{"class":200,"line":308},10,[198,310,311],{"class":219},"}",[198,313,314],{"class":215},")\n",[144,316,317,318,321],{},"For more control (e.g., in Nuxt modules), use the ",[148,319,320],{},"hub:db:migrations:dirs"," hook:",[323,324,325,547],"code-group",{},[188,326,329],{"className":190,"code":327,"filename":328,"language":193,"meta":194,"style":194},"import { createResolver, defineNuxtModule } from '@nuxt/kit'\n\nexport default defineNuxtModule({\n  meta: {\n    name: 'my-auth-module'\n  },\n  setup(options, nuxt) {\n    const { resolve } = createResolver(import.meta.url)\n\n    nuxt.hook('hub:db:migrations:dirs', (dirs) => {\n      dirs.push(resolve('./db-migrations'))\n    })\n  }\n})\n","modules/auth/index.ts",[148,330,331,361,367,379,388,402,407,428,462,466,499,527,535,540],{"__ignoreMap":194},[198,332,333,336,339,342,345,348,351,354,356,359],{"class":200,"line":201},[198,334,335],{"class":204},"import",[198,337,338],{"class":219}," {",[198,340,341],{"class":215}," createResolver",[198,343,344],{"class":219},",",[198,346,347],{"class":215}," defineNuxtModule",[198,349,350],{"class":219}," }",[198,352,353],{"class":204}," from",[198,355,254],{"class":219},[198,357,358],{"class":257},"@nuxt/kit",[198,360,287],{"class":219},[198,362,363],{"class":200,"line":223},[198,364,366],{"emptyLinePlaceholder":365},true,"\n",[198,368,369,371,373,375,377],{"class":200,"line":236},[198,370,205],{"class":204},[198,372,208],{"class":204},[198,374,347],{"class":211},[198,376,216],{"class":215},[198,378,220],{"class":219},[198,380,381,384,386],{"class":200,"line":246},[198,382,383],{"class":226},"  meta",[198,385,230],{"class":219},[198,387,233],{"class":219},[198,389,390,393,395,397,400],{"class":200,"line":267},[198,391,392],{"class":226},"    name",[198,394,230],{"class":219},[198,396,254],{"class":219},[198,398,399],{"class":257},"my-auth-module",[198,401,287],{"class":219},[198,403,404],{"class":200,"line":278},[198,405,406],{"class":219},"  },\n",[198,408,409,412,414,418,420,423,426],{"class":200,"line":290},[198,410,411],{"class":226},"  setup",[198,413,216],{"class":219},[198,415,417],{"class":416},"sHdIc","options",[198,419,344],{"class":219},[198,421,422],{"class":416}," nuxt",[198,424,425],{"class":219},")",[198,427,233],{"class":219},[198,429,430,434,436,439,441,444,446,448,450,452,455,457,460],{"class":200,"line":296},[198,431,433],{"class":432},"spNyl","    const",[198,435,338],{"class":219},[198,437,438],{"class":215}," resolve",[198,440,350],{"class":219},[198,442,443],{"class":219}," =",[198,445,341],{"class":211},[198,447,216],{"class":226},[198,449,335],{"class":204},[198,451,183],{"class":219},[198,453,454],{"class":215},"meta",[198,456,183],{"class":219},[198,458,459],{"class":215},"url",[198,461,314],{"class":226},[198,463,464],{"class":200,"line":302},[198,465,366],{"emptyLinePlaceholder":365},[198,467,468,471,473,476,478,480,482,484,486,489,492,494,497],{"class":200,"line":308},[198,469,470],{"class":215},"    nuxt",[198,472,183],{"class":219},[198,474,475],{"class":211},"hook",[198,477,216],{"class":226},[198,479,261],{"class":219},[198,481,320],{"class":257},[198,483,261],{"class":219},[198,485,344],{"class":219},[198,487,488],{"class":219}," (",[198,490,491],{"class":416},"dirs",[198,493,425],{"class":219},[198,495,496],{"class":432}," =>",[198,498,233],{"class":219},[198,500,502,505,507,510,512,515,517,519,522,524],{"class":200,"line":501},11,[198,503,504],{"class":215},"      dirs",[198,506,183],{"class":219},[198,508,509],{"class":211},"push",[198,511,216],{"class":226},[198,513,514],{"class":211},"resolve",[198,516,216],{"class":226},[198,518,261],{"class":219},[198,520,521],{"class":257},"./db-migrations",[198,523,261],{"class":219},[198,525,526],{"class":226},"))\n",[198,528,530,533],{"class":200,"line":529},12,[198,531,532],{"class":219},"    }",[198,534,314],{"class":226},[198,536,538],{"class":200,"line":537},13,[198,539,305],{"class":219},[198,541,543,545],{"class":200,"line":542},14,[198,544,311],{"class":219},[198,546,314],{"class":215},[188,548,553],{"className":549,"code":550,"filename":551,"language":552,"meta":194,"style":194},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE TABLE IF NOT EXISTS users (\n  id INTEGER PRIMARY KEY,\n  name TEXT NOT NULL,\n  email TEXT NOT NULL\n);\n","modules/auth/db-migrations/0001_create-users.sql","sql",[148,554,555,576,589,602,613],{"__ignoreMap":194},[198,556,557,561,564,567,570,573],{"class":200,"line":201},[198,558,560],{"class":559},"sbssI","CREATE",[198,562,563],{"class":559}," TABLE",[198,565,566],{"class":211}," IF",[198,568,569],{"class":559}," NOT",[198,571,572],{"class":559}," EXISTS",[198,574,575],{"class":215}," users (\n",[198,577,578,581,584,587],{"class":200,"line":223},[198,579,580],{"class":215},"  id ",[198,582,583],{"class":432},"INTEGER",[198,585,586],{"class":432}," PRIMARY KEY",[198,588,264],{"class":215},[198,590,591,594,597,600],{"class":200,"line":236},[198,592,593],{"class":559},"  name",[198,595,596],{"class":432}," TEXT",[198,598,599],{"class":559}," NOT NULL",[198,601,264],{"class":215},[198,603,604,607,610],{"class":200,"line":246},[198,605,606],{"class":215},"  email ",[198,608,609],{"class":432},"TEXT",[198,611,612],{"class":559}," NOT NULL\n",[198,614,615],{"class":200,"line":267},[198,616,617],{"class":215},");\n",[619,620,621,622,625],"tip",{},"All migration files are copied to ",[148,623,624],{},".data/db/migrations"," when you run Nuxt, giving you a consolidated view.",[627,628,630],"h2",{"id":629},"automatic-migrations","Automatic migrations",[144,632,633],{},"Migrations are automatically applied when you:",[635,636,637,644],"ul",{},[638,639,640,641,425],"li",{},"Start the development server (",[148,642,643],{},"npx nuxt dev",[638,645,646,647,425],{},"Build the application (",[148,648,649],{},"npx nuxt build",[144,651,652,653,656],{},"Applied migrations are tracked in the ",[148,654,655],{},"_hub_migrations"," database table.",[658,659,661,662,665],"warning",{"to":660},"/docs/getting-started/deploy#cloudflare","For Cloudflare D1, migrations cannot run during build since there is no database connection in CI. Run ",[148,663,664],{},"npx nuxt db migrate"," locally or set up a CI step to apply migrations before deployment.",[153,667,668,694],{},[144,669,670,671,674,675,678,679,682,683,686,687,690,691,693],{},"To disable automatic migrations during ",[148,672,673],{},"nuxt build",", you can set the ",[148,676,677],{},"applyMigrationsDuringBuild"," option to ",[148,680,681],{},"false",". To disable automatic migrations during ",[148,684,685],{},"nuxt dev",", set ",[148,688,689],{},"applyMigrationsDuringDev"," to ",[148,692,681],{}," (useful when running dev with production env vars):",[188,695,697],{"className":190,"code":696,"filename":192,"language":193,"meta":194,"style":194},"export default defineNuxtConfig({\n  hub: {\n    db: {\n      applyMigrationsDuringBuild: false,\n      applyMigrationsDuringDev: false\n    }\n  }\n})\n",[148,698,699,711,719,727,740,750,754,758],{"__ignoreMap":194},[198,700,701,703,705,707,709],{"class":200,"line":201},[198,702,205],{"class":204},[198,704,208],{"class":204},[198,706,212],{"class":211},[198,708,216],{"class":215},[198,710,220],{"class":219},[198,712,713,715,717],{"class":200,"line":223},[198,714,227],{"class":226},[198,716,230],{"class":219},[198,718,233],{"class":219},[198,720,721,723,725],{"class":200,"line":236},[198,722,239],{"class":226},[198,724,230],{"class":219},[198,726,233],{"class":219},[198,728,729,732,734,738],{"class":200,"line":246},[198,730,731],{"class":226},"      applyMigrationsDuringBuild",[198,733,230],{"class":219},[198,735,737],{"class":736},"sfNiH"," false",[198,739,264],{"class":219},[198,741,742,745,747],{"class":200,"line":267},[198,743,744],{"class":226},"      applyMigrationsDuringDev",[198,746,230],{"class":219},[198,748,749],{"class":736}," false\n",[198,751,752],{"class":200,"line":278},[198,753,299],{"class":219},[198,755,756],{"class":200,"line":290},[198,757,305],{"class":219},[198,759,760,762],{"class":200,"line":296},[198,761,311],{"class":219},[198,763,314],{"class":215},[627,765,767],{"id":766},"generating-migrations","Generating migrations",[144,769,770],{},"Once you have updates your database schema, you can generate new migrations using the following command:",[188,772,777],{"className":773,"code":774,"filename":775,"language":776,"meta":194,"style":194},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx nuxt db generate\n","Terminal","bash",[148,778,779],{"__ignoreMap":194},[198,780,781,785,787,790],{"class":200,"line":201},[198,782,784],{"class":783},"sBMFI","npx",[198,786,422],{"class":257},[198,788,789],{"class":257}," db",[198,791,792],{"class":257}," generate\n",[144,794,795,796,799],{},"This will generate new migrations files in ",[148,797,798],{},"server/db/migrations/{dialect}/"," which are automatically applied during development and deployment.",[627,801,803],{"id":802},"applying-migrations","Applying migrations",[144,805,806],{},"Once you have generated new migrations, you can apply them using the following command:",[188,808,810],{"className":773,"code":809,"filename":775,"language":776,"meta":194,"style":194},"npx nuxt db migrate\n",[148,811,812],{"__ignoreMap":194},[198,813,814,816,818,820],{"class":200,"line":201},[198,815,784],{"class":783},[198,817,422],{"class":257},[198,819,789],{"class":257},[198,821,822],{"class":257}," migrate\n",[144,824,825],{},"This will apply the new migrations to your database.",[619,827,828],{},"When running the development server, NuxtHub will automatically apply the migrations for you.",[830,831,832],"callout",{"to":111},"See the CI/CD guide for production migration workflows, including D1-specific handling.",[627,834,836],{"id":835},"post-migration-queries","Post-migration queries",[838,839,840,841,843],"important",{},"Advanced use case: These queries run after migrations but aren't tracked in ",[148,842,655],{},". Ensure they're idempotent.",[144,845,846,847,850],{},"Use the ",[148,848,849],{},"hub:db:queries:paths"," hook to run additional queries after migrations:",[323,852,853,1054],{},[188,854,857],{"className":190,"code":855,"filename":856,"language":193,"meta":194,"style":194},"import { createResolver, defineNuxtModule } from '@nuxt/kit'\n\nexport default defineNuxtModule({\n  meta: {\n    name: 'my-auth-module'\n  },\n  setup(options, nuxt) {\n    const { resolve } = createResolver(import.meta.url)\n\n    nuxt.hook('hub:db:queries:paths', (paths, dialect) => {\n      paths.push(resolve(`./db-queries/seed-admin.${dialect}.sql`))\n    })\n  }\n})\n","modules/admin/index.ts",[148,858,859,881,885,897,905,917,921,937,965,969,1003,1038,1044,1048],{"__ignoreMap":194},[198,860,861,863,865,867,869,871,873,875,877,879],{"class":200,"line":201},[198,862,335],{"class":204},[198,864,338],{"class":219},[198,866,341],{"class":215},[198,868,344],{"class":219},[198,870,347],{"class":215},[198,872,350],{"class":219},[198,874,353],{"class":204},[198,876,254],{"class":219},[198,878,358],{"class":257},[198,880,287],{"class":219},[198,882,883],{"class":200,"line":223},[198,884,366],{"emptyLinePlaceholder":365},[198,886,887,889,891,893,895],{"class":200,"line":236},[198,888,205],{"class":204},[198,890,208],{"class":204},[198,892,347],{"class":211},[198,894,216],{"class":215},[198,896,220],{"class":219},[198,898,899,901,903],{"class":200,"line":246},[198,900,383],{"class":226},[198,902,230],{"class":219},[198,904,233],{"class":219},[198,906,907,909,911,913,915],{"class":200,"line":267},[198,908,392],{"class":226},[198,910,230],{"class":219},[198,912,254],{"class":219},[198,914,399],{"class":257},[198,916,287],{"class":219},[198,918,919],{"class":200,"line":278},[198,920,406],{"class":219},[198,922,923,925,927,929,931,933,935],{"class":200,"line":290},[198,924,411],{"class":226},[198,926,216],{"class":219},[198,928,417],{"class":416},[198,930,344],{"class":219},[198,932,422],{"class":416},[198,934,425],{"class":219},[198,936,233],{"class":219},[198,938,939,941,943,945,947,949,951,953,955,957,959,961,963],{"class":200,"line":296},[198,940,433],{"class":432},[198,942,338],{"class":219},[198,944,438],{"class":215},[198,946,350],{"class":219},[198,948,443],{"class":219},[198,950,341],{"class":211},[198,952,216],{"class":226},[198,954,335],{"class":204},[198,956,183],{"class":219},[198,958,454],{"class":215},[198,960,183],{"class":219},[198,962,459],{"class":215},[198,964,314],{"class":226},[198,966,967],{"class":200,"line":302},[198,968,366],{"emptyLinePlaceholder":365},[198,970,971,973,975,977,979,981,983,985,987,989,992,994,997,999,1001],{"class":200,"line":308},[198,972,470],{"class":215},[198,974,183],{"class":219},[198,976,475],{"class":211},[198,978,216],{"class":226},[198,980,261],{"class":219},[198,982,849],{"class":257},[198,984,261],{"class":219},[198,986,344],{"class":219},[198,988,488],{"class":219},[198,990,991],{"class":416},"paths",[198,993,344],{"class":219},[198,995,996],{"class":416}," dialect",[198,998,425],{"class":219},[198,1000,496],{"class":432},[198,1002,233],{"class":219},[198,1004,1005,1008,1010,1012,1014,1016,1018,1021,1024,1027,1030,1032,1034,1036],{"class":200,"line":501},[198,1006,1007],{"class":215},"      paths",[198,1009,183],{"class":219},[198,1011,509],{"class":211},[198,1013,216],{"class":226},[198,1015,514],{"class":211},[198,1017,216],{"class":226},[198,1019,1020],{"class":219},"`",[198,1022,1023],{"class":257},"./db-queries/seed-admin.",[198,1025,1026],{"class":219},"${",[198,1028,1029],{"class":215},"dialect",[198,1031,311],{"class":219},[198,1033,150],{"class":257},[198,1035,1020],{"class":219},[198,1037,526],{"class":226},[198,1039,1040,1042],{"class":200,"line":529},[198,1041,532],{"class":219},[198,1043,314],{"class":226},[198,1045,1046],{"class":200,"line":537},[198,1047,305],{"class":219},[198,1049,1050,1052],{"class":200,"line":542},[198,1051,311],{"class":219},[198,1053,314],{"class":215},[188,1055,1058],{"className":549,"code":1056,"filename":1057,"language":552,"meta":194,"style":194},"INSERT OR IGNORE INTO admin_users (id, email, password_hash)\n  VALUES (1, '\u003Cadmin-email>', '\u003Chashed-password>');\n","modules/admin/db-queries/seed-admin.sql",[148,1059,1060,1077],{"__ignoreMap":194},[198,1061,1062,1065,1068,1071,1074],{"class":200,"line":201},[198,1063,1064],{"class":559},"INSERT",[198,1066,1067],{"class":559}," OR",[198,1069,1070],{"class":559}," IGNORE",[198,1072,1073],{"class":559}," INTO",[198,1075,1076],{"class":215}," admin_users (id, email, password_hash)\n",[198,1078,1079,1082,1084,1087,1090,1092,1095,1097,1099,1101,1104,1106],{"class":200,"line":223},[198,1080,1081],{"class":559},"  VALUES",[198,1083,488],{"class":215},[198,1085,1086],{"class":559},"1",[198,1088,1089],{"class":215},", ",[198,1091,261],{"class":219},[198,1093,1094],{"class":257},"\u003Cadmin-email>",[198,1096,261],{"class":219},[198,1098,1089],{"class":215},[198,1100,261],{"class":219},[198,1102,1103],{"class":257},"\u003Chashed-password>",[198,1105,261],{"class":219},[198,1107,617],{"class":215},[619,1109,1110,1111,625],{},"All migrations queries are copied to ",[148,1112,1113],{},".data/db/queries",[627,1115,1117],{"id":1116},"foreign-key-constraints","Foreign-key constraints",[144,1119,1120],{},"For Cloudflare D1 with Drizzle ORM migrations, replace:",[188,1122,1127],{"className":1123,"code":1124,"filename":1125,"language":1126,"meta":194,"style":194},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-PRAGMA foreign_keys = OFF;\n+PRAGMA defer_foreign_keys = on;\n\nALTER TABLE ...\n\n-PRAGMA foreign_keys = ON;\n+PRAGMA defer_foreign_keys = off;\n","Example","diff",[148,1128,1129,1137,1145,1149,1154,1158,1165],{"__ignoreMap":194},[198,1130,1131,1134],{"class":200,"line":201},[198,1132,1133],{"class":219},"-",[198,1135,1136],{"class":226},"PRAGMA foreign_keys = OFF;\n",[198,1138,1139,1142],{"class":200,"line":223},[198,1140,1141],{"class":219},"+",[198,1143,1144],{"class":257},"PRAGMA defer_foreign_keys = on;\n",[198,1146,1147],{"class":200,"line":236},[198,1148,366],{"emptyLinePlaceholder":365},[198,1150,1151],{"class":200,"line":246},[198,1152,1153],{"class":215},"ALTER TABLE ...\n",[198,1155,1156],{"class":200,"line":267},[198,1157,366],{"emptyLinePlaceholder":365},[198,1159,1160,1162],{"class":200,"line":278},[198,1161,1133],{"class":219},[198,1163,1164],{"class":226},"PRAGMA foreign_keys = ON;\n",[198,1166,1167,1169],{"class":200,"line":290},[198,1168,1141],{"class":219},[198,1170,1171],{"class":257},"PRAGMA defer_foreign_keys = off;\n",[830,1173,1176,1177,1181],{"to":1174,":external":1175},"https://developers.cloudflare.com/d1/sql-api/foreign-keys/#defer-foreign-key-constraints","true","Learn more about ",[177,1178,1180],{"href":1174,"rel":1179},[181],"defer foreign key constraints"," in Cloudflare D1.",[1183,1184,1185],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}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 pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":194,"searchDepth":223,"depth":223,"links":1187},[1188,1189,1190,1191,1192,1193],{"id":167,"depth":236,"text":168},{"id":629,"depth":223,"text":630},{"id":766,"depth":223,"text":767},{"id":802,"depth":223,"text":803},{"id":835,"depth":223,"text":836},{"id":1116,"depth":223,"text":1117},"Manage database schema changes in Nuxt with Drizzle ORM migrations, including creating, applying, and tracking migration files safely.","md",null,{},{"title":50},{"title":139,"description":1194},"OPS0q6Fmr_pMhF8WCqmgvx1mgl_PePOnoaHMYis4Tx0",[1202,1204],{"title":46,"path":47,"stem":48,"description":1203,"children":-1},"Learn how to read and write data using Drizzle ORM in Nuxt, including filtering, joining, and aggregating relational data safely and efficiently.",{"title":54,"path":55,"stem":56,"description":1205,"children":-1},"Manage your Nuxt SQL database with the `npx nuxt db` CLI, including generating migrations, applying them, running SQL queries, and marking migrations as applied.",1774893100587]