🧱 Суть
RPC (Remote Procedure Call) – это способ вызвать функцию, которая выполняется на удалённой стороне.
В Supabase RPC позволяет вызывать PostgreSQL-функции из JavaScript-кода.
То есть вместо:
Клиент
|
↓
много запросов к таблицам
|
↓
обработка данныхможно сделать:
Клиент
|
↓
RPC-вызов
|
↓
SQL-функция в PostgreSQL
|
↓
готовый результат📦 Зачем нужен RPC
RPC используют, когда логика:
- сложная;
- связана с несколькими таблицами;
- должна выполняться внутри базы;
- не должна находиться на клиенте.
Например:
- поиск пользователя;
- расчёт данных;
- проверка прав;
- агрегирование информации.
Проблема без RPC
Допустим, нужно найти email пользователя по имени.
Без RPC:
- Получить список пользователей:
supabase
.from('users')
.select('*')- Найти нужного пользователя в JavaScript.
- Получить email.
Это:
- лишние данные;
- лишние запросы;
- логика находится на клиенте.
✅ Решение через RPC
Создаётся функция в PostgreSQL:
CREATE OR REPLACE FUNCTION get_email_by_username(
username_input text
)
RETURNS text
LANGUAGE sql
AS $$
SELECT email
FROM users
WHERE username = username_input;
$$;Теперь клиент вызывает её напрямую.
💻 Код
Вызов RPC из Supabase:
const { data, error } = await supabase.rpc(
'get_email_by_username',
{
username_input: login
}
);Где:
get_email_by_username– имя SQL-функции.
А:
{
username_input: login
}– параметры функции.
Как это работает
- JavaScript вызывает:
supabase.rpc(...)- Supabase отправляет запрос в PostgreSQL.
- PostgreSQL запускает функцию.
- Функция возвращает результат.
- Supabase отдаёт результат обратно в приложение.
RPC и RLS
RPC тоже работает с системой безопасности Supabase.
Если функция выполняется от имени пользователя:
auth.uid()будет доступен внутри неё.
Можно учитывать:
- текущего пользователя;
- его роль;
- права доступа.
Пример проверки пользователя внутри функции
CREATE OR REPLACE FUNCTION get_my_profile()
RETURNS user_profiles
LANGUAGE sql
AS $$
SELECT *
FROM user_profiles
WHERE id = auth.uid();
$$;Теперь пользователь получает только свой профиль.
Важно
RPC не означает: “обойти безопасность и получить всё”.
Обычные правила доступа всё равно важны.
Особенно нужно учитывать:
- RLS;
- права функции;
SECURITY DEFINER/SECURITY INVOKER.
🎯 Вывод
- RPC – это вызов SQL-функции из приложения.
- Используется для сложной логики, которую лучше выполнять в базе.
- Уменьшает количество запросов от клиента.
- Позволяет держать бизнес-логику ближе к данным.
- В Supabase вызывается через:
supabase.rpc()