Function trong Supabase: Tạo và sử dụng stored procedures
Khi làm việc với cơ sở dữ liệu quan hệ, việc lặp lại các tác vụ SQL phức tạp trên nhiều vị trí trong ứng dụng không chỉ gây phiền toái mà còn tiềm ẩn nguy cơ sai sót. Supabase giải quyết vấn đề này bằng cách cung cấp stored procedures (thủ tục lưu trữ) thông qua tính năng Function. Đây là cách hiệu quả để đóng gói logic truy vấn, đảm bảo tính nhất quán và tăng hiệu năng.
Stored procedures là gì và tại sao nên dùng?
Stored procedures là các khối mã SQL được lưu trữ trực tiếp trong cơ sở dữ liệu. Thay vì viết lại cùng một truy vấn nhiều lần, bạn chỉ cần gọi tên procedure. Lợi ích bao gồm:
– Hiệu năng: Database engine tối ưu hóa việc thực thi.
– Bảo mật: Hạn chế quyền truy cập trực tiếp vào bảng, chỉ cho phép gọi procedure.
– Tính nhất quán: Logic được tập trung tại một nơi, tránh lỗi do copy-paste.
– Dễ bảo trì: Thay đổi logic ở một chỗ, toàn bộ ứng dụng được cập nhật.
Tạo Function trong Supabase
Supabase cung cấp hai cách chính để tạo Function: qua Table Editor và SQL Editor.
Tạo Function qua Table Editor
1. Truy cập Table Editor trong dashboard Supabase.
2. Chọn tab Functions.
3. Click New Function.
4. Điền các thông tin:
– Function name: Tên procedure (ví dụ: get_user_by_email).
– Language: Thường là plpgsql cho PostgreSQL.
– Arguments: Tham số đầu vào (nếu có).
– Return type: Kiểu dữ liệu trả về (có thể là TABLE hoặc kiểu đơn).
– Function body: Viết code SQL bên trong.
5. Click Create.
Tạo Function qua SQL Editor
Với cách này, bạn viết trực tiếp câu lệnh SQL. Ví dụ tạo một function đơn giản:
CREATE OR REPLACE FUNCTION public.get_user_by_email(email_param text)
RETURNS SETOF users
AS $$
BEGIN
RETURN QUERY
SELECT *
FROM users
WHERE email = email_param;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;Nếu muốn function trả về JSON:
CREATE OR REPLACE FUNCTION public.get_user_by_email_json(email_param text)
RETURNS json
AS $$
BEGIN
RETURN (
SELECT json_agg(row_to_json(u))
FROM users u
WHERE email = email_param
);
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;