Недавно мне нужно было запустить пользовательские функции SQL в проекте Supabase. Их Javascript SDK не поддерживает это, поэтому единственный способ — использовать функции базы данных. Затем вы можете вызывать эти функции с помощью Javascript SDK.

Давайте рассмотрим очень простой пример, используя таблицу с именем users.

CREATE OR REPLACE FUNCTION all_users()
  RETURNS TABLE (f_id   uuid   
               , f_email   text
               , f_full_name text)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT id, email, full_name FROM users
END
$func$;

Приведенная выше функция вернет id, email, full_name для всех пользователей в таблице. Чтобы быстро протестировать функцию, вы можете запустить SELECT * FROM all_users();.

Теперь, переходя к коду Javascript, вы можете запустить функцию, используя следующий синтаксис:

let { data, error } = await supabase.rpc('all_users')

Это так просто 😅.

Теперь давайте посмотрим на функцию, которая получает два параметра:

CREATE OR REPLACE FUNCTION all_users(created_from timestamp, created_to timestamp)
  RETURNS TABLE (f_id   uuid   
               , f_email   text
               , f_full_name text)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT id, email, full_name FROM users BETWEEN created_from AND created_to
END
$func$;

И мы можем вызвать эту функцию из Javascript SDK следующим образом:

const { data, error } = await supabase
  .rpc('all_users', { created_from: ..., created_to: ... })

Если вы хотите связаться со мной, проверьте мой Twitter.

Статья размещена с использованием bloggu.io. Попробуйте бесплатно.