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行に含まれています。ここでは関数名・戻り値の型・実行言語を指定しています。languageplpgsql, plv8, plpythonなども選べるらしいのですが、それぞれの違いはこれから調べていきます。

    create or replace function hello_world()
    returns text
    language sql

    テーブルの情報を取得する関数を作ってみる

    SQLが書けるので、例えば次のようなクエリも関数にできます。

    select title from public.books;

    この場合、returnstextに変更して、文字列が取得できる関数であることを定義する必要があります。

    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;

    参考記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark