SupabaseでDB Functionを試してみる
最近、SQLにも関数があることを知りました。Supabaseでも関数を作成できるので、SQL Editorを使って入門しました。関数はCREATE FUNCTIONで定義し、処理の本体は$$で囲んで書きます。関数の定義には関数名・戻り値の型・実行言語を指定します。戻り値がテキストの関数を作成する例を紹介しました。また、テーブルの情報を取得する関数や複数件取得する方法も説明しました。関数は後片付けにDROP FUNCTIONで削除できます。参考記事: https://supabase.com/docs/guides/database/functions
目次
最近になってようやくSQLにも関数がある・実行できることを知りました。Supabaseでもできるとのことでしたので、SQL Editorを使って入門してみた覚書です。
CREATE FUNCTION
で関数を定義する
関数を定義するSQLは、こんな感じで書きます。
create or replace function hello_world()
returns text
language sql
as $
select 'hello world';
$;
$$
で囲まれた部分が処理の本体です。今回はSELECT
で’hello world’を取得するクエリを関数にします。
$
select 'hello world';
$;
functionの定義系が冒頭の3行に含まれています。ここでは関数名・戻り値の型・実行言語を指定しています。language
はplpgsql, plv8, plpython
なども選べるらしいのですが、それぞれの違いはこれから調べていきます。
create or replace function hello_world()
returns text
language sql
テーブルの情報を取得する関数を作ってみる
SQLが書けるので、例えば次のようなクエリも関数にできます。
select title from public.books;
この場合、returns
をtext
に変更して、文字列が取得できる関数であることを定義する必要があります。
create or replace function book_titles()
returns text
language sql
as $
select title from public.books;
$
実行すると、データが取得できました。ただ、件数が1件なので、複数件取得できるようにする方法がまだある気はします。
テーブルのデータごと返す方法
*
などを使って、テーブルのデータを丸ごと返すこともできます。
select * from public.books;
今回はsetof TABLE_NAME
で戻り値を指定しました。
create or replace function books()
returns setof public.books
language sql
as $
select * from public.books;
$
結果がこちらです。この形が扱いやすいのかどうかが判断ついていないのですが、もしかしたら他のreturns
の書き方もあるのかもしれません。
後片付け
作った関数は、DROP FUNCTION
で削除できます。
DROP function books;
DROP function book_titles;