SQLSupabase

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;

参考記事

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts