수파베이스를 시작하기 전에 알아야 할 3가지
안녕하세요, 저는 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 지식이 필요합니다.
Reference
이 문제에 관하여(수파베이스를 시작하기 전에 알아야 할 3가지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/perfect7m/3-things-you-should-know-before-you-start-with-supabase-f0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)