برنامه نویسی

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

امروز ما طرح های اعلامی را برای ساده سازی مدیریت و حفظ طرح های پیچیده پایگاه داده منتشر می کنیم. با طرح های اعلانی ، می توانید ساختار پایگاه داده خود را به روشی واضح ، متمرکز و کنترل شده با نسخه تعریف کنید.

⚡ اطلاعات بیشتر در هفته راه اندازی

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 ، یک تغییر ساده برای اضافه کردن یک ستون جدید شامل مراحل زیر است.

  1. آخرین طرح را برای projects جدول در پرونده های مهاجرت ما یا با پرس و جو از پایگاه داده ما.
  2. نوشتن alter table بیانیه در یک پرونده مهاجرت جدید.
  3. کپی و به روز کردن projects مشاهده تعریف برای شامل ستون جدید.
  4. تعریف عملکرد Trigger را کپی و به روز کنید تا ستون جدید گنجانده شود.
  5. تست های جدید PGTAP را اضافه کنید و تأیید کنید که تست های موجود می گذرد.
  6. پرونده مهاجرت جدید را برای بررسی ارسال کنید ، که حداقل چند صد خط خواهد بود.

این فرایند خسته کننده است و ناامید کننده است که چندین مهندس روی آن کار کنند 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 – طرحواره های اعلامی برای مدیریت ساده تر بانک اطلاعاتی

مرحله ساخت

جلسات جامعه

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا