수파베이스를 시작하기 전에 알아야 할 3가지

Supabase은 강력하고 많은 인기를 얻고 있습니다. Firebase를 위한 무료이며 간단한 훌륭한 대안입니다. Firebase에 익숙하지 않더라도. 수파베이스에는 필요한 모든 것이 있습니다. 실시간 구독, 인증 및 스토리지가 포함된 데이터베이스.




안녕하세요, 저는 Happy React 을(를) 만들었습니다. 웹사이트에 반응 위젯을 무료로 추가하는 서비스입니다. 성능과 사용 편의성에 신경을 썼습니다. 블로그나 문서 페이지에 반응을 추가할 수 있습니다! 아직 얼리 액세스 중이므로 의견을 알려주시고 waiting list 에 참여하세요. https://happyreact.com/에서 자세히 알아보기


수파베이스 소개



수파베이스는 오픈 소스 기술을 기반으로 구축되었습니다. PostgreSQL , PostgREST , gotrue , 그리고 많은 다른 사람. 좋은 생각입니다. 훌륭한 라이브러리와 기술이 많이 있습니다. 기존 도구를 현명하게 사용하는 것이 바퀴를 재발명하는 데 시간을 소비하는 것보다 나을 수 있습니다.

무료 플랜에는 애플리케이션을 구축하는 데 필요한 모든 기능이 있습니다. 그것의 가장 좋은 부분은 당신이 잠겨 있지 않다는 것입니다. 데이터베이스 데이터를 덤프하고 다른 공급자 또는 사용자 지정 서버로 이동할 수 있습니다. 잠금이 없습니다!

이러한 모든 기능 외에도 프로젝트를 관리할 수 있는 대시보드가 ​​있습니다.

수파베이스 기능


  • 인증
  • 보관함
  • 실시간 구독이 포함된 데이터베이스

  • 수파베이스는 완벽하지는 않지만 강력합니다



    가장 큰 강점은 가장 큰 몰락입니다. 반복하지만 Supabase는 PostgreSQL 위에 구축됩니다. SQL, 쿼리 생성 방법 및 PostgreSQL 기능에 대해 알아야 합니다. 다음은 시작한 후 가질 수 있는 supabase에 대한 일반적인 문제입니다.

    복잡한 쿼리에 대한 보기 만들기



    Supabase 쿼리 빌더는 유연합니다. 기본 선택, 행 수 계산 또는 쿼리 조인을 수행할 수 있지만 때로는 고급 SQL 사용이 필요할 수 있습니다. Postgres views에서 도와드릴 수 있습니다.

    drop view if exists sold_products;
    create
    or replace VIEW public.sold_products AS (
      select
        DISTINCT ON (orders.product_id) product_id,
        products.name as name
      from
        orders
        inner join products on orders.product_id = products.id
    );
    


    이 작은 스니펫은 모든 주문을 받고 반복되는 제품을 제외하므로 판매된 모든 제품 목록을 얻습니다.

    ⚠️ Note that view inherits permissions of creator. When you are creating it as admin it will have same permissions (bypass RLS) as admin. Create views with caution.



    삭제 시 계단식 추가



    테이블에서 하나의 레코드를 삭제하고 다른 테이블에 외래 키 열이 있으면 오류가 발생합니다. 외래 키가 있는 레코드 및 기타 레코드를 삭제하려면 계단식 삭제를 추가해야 합니다.

    CREATE OR REPLACE FUNCTION 
        replace_foreign_key(f_table VARCHAR, f_column VARCHAR, new_options VARCHAR) 
    RETURNS VARCHAR
    AS $$
    DECLARE constraint_name varchar;
    DECLARE reftable varchar;
    DECLARE refcolumn varchar;
    BEGIN
    SELECT tc.constraint_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name 
    FROM 
        information_schema.table_constraints AS tc 
        JOIN information_schema.key_column_usage AS kcu
          ON tc.constraint_name = kcu.constraint_name
        JOIN information_schema.constraint_column_usage AS ccu
          ON ccu.constraint_name = tc.constraint_name
    WHERE constraint_type = 'FOREIGN KEY' 
       AND tc.table_name= f_table AND kcu.column_name= f_column
    INTO constraint_name, reftable, refcolumn;
    EXECUTE 'alter table ' || f_table || ' drop constraint ' || constraint_name || 
    ', ADD CONSTRAINT ' || constraint_name || ' FOREIGN KEY (' || f_column || ') ' ||
    ' REFERENCES ' || reftable || '(' || refcolumn || ') ' || new_options || ';';
    RETURN 'Constraint replaced: ' || constraint_name || ' (' || f_table || '.' || f_column ||
     ' -> ' || reftable || '.' || refcolumn || '); New options: ' || new_options;
    END;
    $$ LANGUAGE plpgsql
    


    그런 다음 다음과 같은 함수를 호출해야 합니다.

    select replace_foreign_key('user_rates_posts', 'post_id', 'ON DELETE CASCADE');
    


    행 수준 보안



    무단 액세스로부터 데이터베이스를 보호하는 것은 RLS를 사용하는 것입니다. 이러한 특별한 "검사"는 쿼리를 실행하는 사람이 그렇게 할 권한이 있는지 확인하기 위해 쿼리 전에 실행됩니다.

    현재 인증된 사용자 ID로 대체될 uid()를 참조할 수 있습니다. 현재 처리 중인 레코드가 인증된 사용자의 것인지 비교할 수 있습니다.

    Supbase SDK를 사용하여 보내는 모든 값은 RLS 정책 내에서 대체됩니다.

    다음으로 RLS를 추가해야 합니다. 좋은 생각은 깔끔하게 유지하고 모든 변수를 전달하고 쿼리를 작성할 수 있는 Postgres 함수를 만드는 것입니다.

    CREATE
    OR REPLACE FUNCTION can_insert_post(_user_id uuid) RETURNS bool AS $$
    SELECT EXISTS (
      SELECT
          1
        FROM
          posts
          INNER JOIN users ON users.id = posts.user_id
        GROUP BY
          users.id,
          posts.user_id
        HAVING
          COUNT(posts.id) < users.post_limit
          AND _user_id = posts.user_id
    );
    $$ LANGUAGE sql SECURITY DEFINER;
    


    이 기능은 사용자가 게시물 한도를 초과하지 않았는지 확인합니다. 다음으로 RLS 삽입 정책에서 참조해야 합니다.

    can_insert_post(uid())
    


    요약



    Supabase는 훌륭한 도구이지만 약간의 Postgres 지식이 필요합니다. 빙산의 일각에 불과하다는 점을 명심하십시오. Supabase에 더 깊이 빠져들수록 더 많은 Postgres 지식이 필요합니다.

    좋은 웹페이지 즐겨찾기