Վերադառնալ
Safe / Not Safe-ը ստուգում է Postgres-ի միգրացիաները թողարկումից առաջ
SiTech AI Team2 წთ. საკითხავი

Safe / Not Safe-ը ստուգում է Postgres-ի միգրացիաները թողարկումից առաջ

Բաց կոդով տեղական գործիքը Postgres-ի միգրացիան վերլուծում է բրաուզերում՝ libpg_query-ով, և մինչ տեղադրումը տալիս է SAFE, NOT SAFE կամ NEEDS CONTEXT եզրակացություն՝ առանց սերվերի և SQL-ի գրանցման։

Եզրակացություն թողարկումից առաջ

Safe / Not Safe (safenotsafe.dev) PostgreSQL-ի միգրացիաների ստուգիչ է, որն ամբողջովին աշխատում է բրաուզերում։ Ծրագրավորողը միգրացիան տեղադրում է խմբագրիչում, SQL-ը վերլուծվում է Web Worker-ում՝ WebAssembly-ի վերածված libpg_query վերլուծիչով, և գործիքը տալիս է երեք եզրակացություններից մեկը՝ SAFE, NOT SAFE կամ NEEDS CONTEXT։ Նախագծի README-ի համաձայն՝ նպատակը միտումնավոր նեղ է՝ բռնել սխեմայի փոփոխությունների ծանոթ թակարդները, մինչև դրանք կհասնեն արտադրական միջավայր։

Մինչ եզրակացությունը, հավելվածը երկու հարց է տալիս՝ քանի տող կա նպատակային աղյուսակում (50 հազարից պակաս, 50 հազարից մինչև 5 միլիոն, 5 միլիոնից ավելի) և արդյոք թողարկման գործիքը DDL-ը փաթաթում է տրանզակցիայի մեջ։ Այդ պատճառով էլ կա երրորդ եզրակացությունը. որոշ հրամաններ վտանգավոր են միայն որոշակի չափի աղյուսակի կամ տրանզակցիայի ներսում։

Ինչ է ստուգում կանոնների կատալոգը

Կանոնները գրված են TypeScript-ով, և պահոցը թվարկում է տասներկու ստուգում՝ սովորական CREATE INDEX ընդդեմ CREATE INDEX CONCURRENTLY-ի, CONCURRENTLY-ն տրանզակցիայի փաթաթանի ներսում, default-ով ավելացված սյունակներ, ALTER COLUMN TYPE-ի պատճառով աղյուսակի վերագրանցում, առանց NOT VALID ավելացված արտաքին բանալիներ, VALIDATE CONSTRAINT, SET NOT NULL, DROP COLUMN, անվանափոխություններ, unique constraint-ի ուղիղ կառուցում, TRUNCATE և վերագրանցման հրամաններ՝ VACUUM FULL և CLUSTER։

Յուրաքանչյուրն ունի իրական գին։ Սովորական CREATE INDEX-ը արգելափակում է գրառումը կառուցման ողջ ընթացքում. CREATE INDEX CONCURRENTLY-ն դա խուսափում է, բայց չի կարող աշխատել տրանզակցիայի ներսում։ Հաստատուն default-ով ավելացված սյունակը ժամանակակից PostgreSQL-ում էժան է, սակայն expression կամ volatile default-ը դեռ վերագրանցում է ամբողջ աղյուսակը։ ALTER COLUMN TYPE-ը սովորաբար վերագրանցում է աղյուսակը և այդ ընթացքում այն փակ է գրառման համար։ Առանց NOT VALID ավելացված արտաքին բանալին անմիջապես ստուգում է բոլոր գոյություն ունեցող տողերը. եթե ավելացնեք NOT VALID-ով, իսկ VALIDATE CONSTRAINT-ը գործարկեք ավելի ուշ, աշխատանքը բաժանվում է երկու քայլի։ Անվանափոխությունները և DROP COLUMN-ը վտանգավոր են այլ կերպ. աստիճանական թողարկման ժամանակ դեռ աշխատող հին հավելվածները դիմում են հին անվանը։

Տեղական աշխատանք և CLI

Ամբողջ վերլուծությունը կատարվում է բրաուզերի ներդիրում։ Բուֆերները սկավառակին չեն գրվում, ոչինչ սերվեր չի ուղարկվում, և նախագծի գաղտնիության բաժնի համաձայն՝ չկա API երթուղի, որը ստանում է տեղադրված SQL-ը, չկան տվյալների բազայի կապեր և տելեմետրիա։ Նույն շարժիչը փաթեթավորված է նաև որպես CLI. npx safe-not-safe check migration.sql-ը վերլուծության արդյունքը տպում է տերմինալում։

Դիզայնը Vite-ով կառուցված React հավելվածի կմախք է. վերլուծիչը աշխատում է նախապես գործարկված Web Worker-ում, որպեսզի WASM-ի կոմպիլյացիայի ընթացքում ինտերֆեյսը չկախվի։ Արտադրական նպատակակետը Cloudflare Workers-ն է, որի կոնֆիգուրացիայում դիտավորյալ չկան D1, R2 կամ KV կապեր։ Կոդը բաց է GitHub-ում՝ viggy28/safe-not-safe պահոցում։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։