برنامه های اعلامی برای مدیریت ساده تر بانک اطلاعاتی

امروز ما طرح های اعلامی را برای ساده سازی مدیریت و حفظ طرح های پیچیده پایگاه داده منتشر می کنیم. با طرح های اعلانی ، می توانید ساختار پایگاه داده خود را به روشی واضح ، متمرکز و کنترل شده با نسخه تعریف کنید.
⚡ اطلاعات بیشتر در هفته راه اندازی
https://www.youtube.com/watch؟v=ts7heecuvh0
طرح های اعلامی چیست؟
طرحواره های اعلامی وضعیت نهایی مورد نظر پایگاه داده را در آن ذخیره می کنند .sql
پرونده هایی که می توانند در کنار یک پروژه ذخیره و نسخه شوند. به عنوان مثال ، در اینجا طرح اعلامی برای یک کلاسیک است products table
:
create table "products" (
"id" serial primary key,
"name" text not null,
"description" text,
"price" numeric(10,2) not null,
"created_at" timestamp default now()
);
alter table "products"
enable row level security;
طرحواره های اعلانی مزایای بی شماری را برای ایجاد تغییر در طرحواره پایگاه داده شما مستقیماً ارائه می دهند:
- یک صفحه شیشه ایبشر کل طرحواره پایگاه داده خود را در یک مکان حفظ کرده و باعث کاهش افزونگی و خطاهای احتمالی می شود.
- مهاجرت های نسخه ایبشر به طور خودکار فایل های مهاجرت را تولید می کنند ، و از طرح های مداوم به روز شده در محیط ها اطمینان می دهند. پرونده های طرحواره ای اعلامی خود را در کنار پرونده های پروژه خود در سیستم کنترل نسخه خود ذخیره کنید.
- بررسی کد مختصربشر بدون تکرار دستی اسکریپت های مهاجرت پیچیده ، به راحتی تغییرات را در جداول ، نماها و توابع بررسی کنید.
طرح های اعلانی در مقابل مهاجرت
بهترین روش استفاده از مهاجرت برای ردیابی و اعمال تغییرات در پایگاه داده ها است. هر بار که تغییر ایجاد می کنید ، یک فایل جدید جدید با تمام تغییرات ایجاد می کنید ، و تغییرات را قابل تکرار و قابل تکرار نگه می دارید.
با این حال ، با افزایش پیچیدگی یک طرح های پایگاه داده ، توسعه با استفاده از مهاجرت های نسخه ای به طور فزاینده ای دشوار می شود زیرا یک مکان واحد برای دیدن کل طرحواره پایگاه داده وجود ندارد.
به عنوان مثال ، در supabase ما یک پیچیده و اغلب به روز شده ایم projects
جدول در اینجا تا حدی آنچه را با RLS فعال به نظر می رسد:
create table private.projects (
id bigint not null,
name text not null,
organization_id bigint not null,
inserted_at timestamp not null,
updated_at timestamp not null
);
alter table private.projects
enable row level security;
create policy projects_insert
on private.projects
for insert
to authenticated
with check auth.can_write(project_id);
create policy projects_select
on private.projects
for select
to authenticated
using auth.can_read(project_id);
-- Users can only view the projects that they have access to
create view public.projects as select
projects.id,
projects.name,
projects.organization_id,
projects.inserted_at,
projects.updated_at
from private.projects
where auth.can_read(projects.id);
در projects
جدول در یک طرح خصوصی ایجاد شده است ، با یک دیدگاه عمومی در معرض خواندن. کنترل دسترسی مبتنی بر ویژگی (ABAC) در بالای خط مشی های RLS برای اطمینان از نمایش داده شدگان فقط پروژه هایی را که کاربر به آن دسترسی دارد ، اجرا می شود.
از آنجا که دیدگاه های Postgres به طور پیش فرض به روز نمی شود ، ما توابع ماشه را برای نوشتن Cascade به جدول زیرین تعریف کرده ایم که یک کاربر Supabase یک پروژه جدید ایجاد می کند. این باعث می شود توسعه آسانتر شود زیرا projects
مشاهده را می توان در حالی که از سیاست های مناسب RLS در جدول زیرین استفاده می کنید ، با تماس های منظم پس از غده وارد کنید.
-- Triggers to update views from PostgREST: select('projects').insert({ ... })
create function public.public_projects_on_insert() returns trigger
as $$
begin
insert into private.projects(
name,
organization_id,
inserted_at,
updated_at
) values (
NEW.name,
NEW.organization_id,
coalesce(NEW.inserted_at, now()),
coalesce(NEW.updated_at, now())
) returning * into NEW;
return NEW;
end
$$ language plpgsql;
create trigger public_projects_on_insert
instead of insert
on public.projects
for each row
execute function public.public_projects_on_insert();
این پیچیدگی سرعت توسعه را کند می کند ، زیرا تغییر در جدول ممکن است دیدگاه ها یا عملکردهای دیگر را خراب کند. در اوایل سال 2022 ، یک تغییر ساده برای اضافه کردن یک ستون جدید شامل مراحل زیر است.
- آخرین طرح را برای
projects
جدول در پرونده های مهاجرت ما یا با پرس و جو از پایگاه داده ما. - نوشتن
alter table
بیانیه در یک پرونده مهاجرت جدید. - کپی و به روز کردن
projects
مشاهده تعریف برای شامل ستون جدید. - تعریف عملکرد Trigger را کپی و به روز کنید تا ستون جدید گنجانده شود.
- تست های جدید PGTAP را اضافه کنید و تأیید کنید که تست های موجود می گذرد.
- پرونده مهاجرت جدید را برای بررسی ارسال کنید ، که حداقل چند صد خط خواهد بود.
این فرایند خسته کننده است و ناامید کننده است که چندین مهندس روی آن کار کنند projects
جدول همزمان ادغام PR ها منجر به درگیری ادغام می شود که باید با تکرار مراحل 1-5 برطرف شود.
با استفاده از طرح های اعلانی در تولید
اتخاذ طرحواره های اعلامی در هنگام بروزرسانی طرحواره های پایگاه داده ، مهندسان ما را به یک صفحه شیشه ای اختصاص داد. ما به جای اینکه به صورت دستی کپی برداری از نهادهای Postgres تحت تأثیر در یک پرونده مهاجرت ، فقط باید تعریف طرحواره را در یک مکان تغییر دهیم.
سپس ما از یک ابزار Schema Diff مانند Migra استفاده می کنیم تا هنگام تولید پرونده مهاجرت ، به روزرسانی های لازم را در مورد نمایش ها و توابع بفهمیم.
به عنوان مثال ، اضافه کردن یک جدید metadata
ستون به projects
جدول اکنون به یک خط متفاوت تبدیل می شود.
--- a/supabase/schemas/projects.sql
+++ b/supabase/schemas/projects.sql
@@ -2,6 +2,7 @@ create table private.projects (
id bigint not null,
name text not null,
organization_id bigint not null,
+ metadata jsonb,
inserted_at timestamp not null,
updated_at timestamp not null
);
همین فرآیند همچنین در مورد نمایش ها ، توابع پایگاه داده ، سیاست های RLS ، کمک های مالی ، انواع سفارشی و محدودیت ها اعمال می شود. در حالی که بررسی های دستی هنوز در پرونده مهاجرت تولید شده مورد نیاز است ، اما توسعه ما را از ساعت به دقیقه کاهش داده است. همچنین بسیار ساده تر می توانید درگیری های ادغام شده توسط سایر روابط عمومی را انجام دهید.
با طرح های اعلامی شروع کنید
طرح های اعلانی امروز در Supabase در دسترس هستند.
ما همان مجموعه ابزارهایی را که برای 2 سال گذشته در داخل آن استفاده کردیم به Supabase CLI اضافه کردیم. این که آیا شما به تازگی با مهاجرت شروع کرده اید و یا از مدیریت صدها پرونده مهاجرت استفاده می کنید ، طرح های اعلامی را امتحان کنید زیرا احتمالاً روند توسعه شما را ساده می کند.
برای تهیه ابزار بهتر و ادغام IDE در هنگام توسعه با طرح های اعلامیه ، پست وبلاگ ما را در سرور زبان Postgres بررسی کنید.
هفته 14 راه اندازی
مرحله اصلی
روز 1 – کتابخانه UI Supabase
روز 2 – توابع لبه supabase: از داشبورد + DENO 2.1 مستقر شوید
روز 3 -زمان واقعی: پخش از پایگاه داده
روز 4 – طرحواره های اعلامی برای مدیریت ساده تر بانک اطلاعاتی
مرحله ساخت
جلسات جامعه