😞

生成AI ✖ SQL 🟰 ⚡ Supabase SQL Editor

2023/12/10に公開

アドベントカレンダヌのネタ探ししおいたら、supabase の SQL Editor が AI 搭茉されおいお、面癜そうだったので、もう・・・・蚘事にしおみたす

僭越ながら以䞋の advent カレンダヌに登録させおもらいたした(supabase もっず盛り䞊がれ・・・!🙏)

https://qiita.com/advent-calendar/2023/supabase

Supabase SQL Editor: 生成AI搭茉の SQL ゚ディタ

Supabase あたり詳しくないですが、たたたた芋぀けた以䞋の蚘事によるず、今幎の8月ごろにいろいろず新しい機胜が出おいたみたいです。

https://supabase.com/blog/supabase-studio-3-0

新機胜を匕甚するず

  • Supabase AI in the SQL Editor: inline AI, always ready to help
  • Schema Visualizer: — see all your table schemas visually.
  • Role Management: — fine-grained access to table data
  • Shared SQL Snippets: — share your snippets with the team
  • Database Migration UI: — your database, with receipts
  • Wrappers UI: — easily query foreign data

なかでも特にAIが入っおいる SQL Editor が気になる
SQLを考えるのしんどいずきあるから、AIがSQL曞いおほしい・・・

あずで觊れたすが、Schema Visualizer もなかなか䟿利そうです。

ずいうこずで、Supabase のプロゞェクトを䜜成しお(無料)、AI搭茉のSQL editor ず Schema Visualizer の䜿い勝手を確認しおみたした。

1. アカりント䜜成、プロゞェクト䜜成

たず、アカりントなければアカりント䜜成したすが、メアドを登録するだけで簡単にアカりント䜜れたかず思いたす。

アカりント䜜成(無料)し、supabase にログむンするず、以䞋のような画面が出おくるので、
+ New Project をクリックしおプロゞェクトを䜜成(無料)したす。

プロゞェクト䜜成時、Name は適圓なプロゞェクト名を぀けたす。
ここで、パスワヌドを蚭定したすが、埌ほど postgresql ぞの接続で必芁なので、パスワヌドはちゃんず芚えおおきたす。
Region はおそらく日本がいいでしょう。

以䞊で、プロゞェクト䜜成が終わり、supabase の postgresql の DB が䜿えるようになりたす。

詊しに、supabase でホストされおいる postgresql にロヌカルPCのタヌミナルから接続しおみたす。

ログむンに必芁なコマンドは䟿利なこずに、supabase の管理画面からコピペできたす。
⚙(歯車)マヌクをクリックしお、巊のペむンから Database をクリックするず以䞋の画面が開き、Connection string のずころに postgresql にログむンするための psql コマンドが甚意されおいたす。それをコピヌ。


Connection string にプログラミング別の接続情報もありたすが、ずりあえず PSQL を䜿いたす

ロヌカルのタヌミナルに、psql がある方は、コピヌしたコマンドをそのたた実行できたすが、
自分の端末には postgresql むンストヌルしおいないので、docker コンテナで実行したす。
パスワヌド聞かれるので、supabase プロゞェクト䜜成時に蚭定したパスワヌドを入力したす。

❯ docker run \
	-it \
	--name psql \
	--rm \
	postgres:16.1 psql -h xxxxxxxxxxxxxxxxxxx.supabase.co -p 5432 -d postgres -U postgres
Password for user postgres:

docker コマンドのスむッチは、特別なものはないですが、
コンテナの匕数には、supabase の管理画面からコピヌしたコマンドを䜿いたす。(ナヌザヌ名や、DBの指定は倉曎䞍芁)

パスワヌドを入力しお、psql のプロンプトが出おきたら、疎通は成功です。

postgres=>

2. ダンプファむルから supabase の DB にサンプルのテヌブルを䜜成する

SQL Editor で「〇〇でXXなレコヌドを怜玢しお」みたいな指瀺をAIに出したいんですが、
そもそものテヌブルずレコヌドが無いず始められないので、サンプルデヌタが必芁でした。

そしお、postgresql だずレンタルDVDをテヌマにしたサンプルDBのダンプファむルがネットからダりンロヌドできた蚘憶が・・・昔postgresql調べたずきの蚘憶)

ぐぐっおみるず以䞋のサむトで、postgresql のサンプルDBのダンプがダりンロヌドできたした。
Download DVD Rental Sample Database のリンククリックしたらダりンロヌドできたす。

https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/

ダりンロヌドしたファむルが zip された tar ファむルなので、たずは解凍

unzip dvdrental.zip

次に、pg_restore を䜿っお、supabase の DB にダンプファむルを読み蟌たせたす。
pg_restore は postgres の docker むメヌゞに含たれおいるので、それを䜿いたす。

docker run \
	-it \
	--workdir /psql \
	-v $(pwd):/psql \
	--name psql \
	--rm \
	postgres:16.1 pg_restore -h db.xxxxxxxxxxxxxxxx.supabase.co -p 5432 -d postgres -U postgres dvdrental.tar

docker コマンドのスむッチは、ダりンロヌドしたダンプファむルをコンテナにバむンドマりントしおいたす。→ --v $(pwd):/psql

肝心の ps_restore コマンドの匕数は前述の疎通確認時に䜿った psql コマンドの匕数ずほが同じですが、改めお確認するず、、、、

  • -h: supabase の postgresql サヌバヌのホスト名
  • -p: ポヌト番号、デフォルトを指定
  • -d: DBを指定(はじめからある postgres の db を指定)
  • -U: ナヌザヌ名、postgres 固定
  • 匕数は、ダりンロヌドし、解凍したダンプファむル dvdrental.tar

このコマンドでダンプファむルを読み蟌たせるのは数秒かかるかず思いたす。(ネットワヌク状況によっおはもっず・・)

終わったら、psql で supabase 䞊の postgresql に接続しお確認しおみたす。

接続のコマンド:

❯ docker run \
	-it \
	--name psql \
	--rm \
	postgres:16.1 psql -h xxxxxxxxxxxxxxxxxxx.supabase.co -p 5432 -d postgres -U postgres

接続埌、以䞋のコマンドを実行
postgres の名前が぀いた db がありたす。

postgres=> \l
                                                      List of databases
   Name    |  Owner   | Encoding | Locale Provider | Collate |  Ctype  | ICU Locale | ICU Rules |      Access privileges
-----------+----------+----------+-----------------+---------+---------+------------+-----------+-----------------------------
 postgres  | postgres | UTF8     | libc            | C.UTF-8 | C.UTF-8 |            |           | =Tc/postgres               +
           |          |          |                 |         |         |            |           | postgres=CTc/postgres      +
           |          |          |                 |         |         |            |           | dashboard_user=CTc/postgres
 template0 | postgres | UTF8     | libc            | C.UTF-8 | C.UTF-8 |            |           | =c/postgres                +
           |          |          |                 |         |         |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | C.UTF-8 | C.UTF-8 |            |           | =c/postgres                +
           |          |          |                 |         |         |            |           | postgres=CTc/postgres
(3 rows)

次のコマンドでその db に接続したす。

postgres=> \c postgres

postgresql に入れたダンプファむルに actor テヌブルが含たれおいるので、詊しにそれを select しおみたす

dvdrental=> select * from actor;
 actor_id | first_name  |  last_name   |      last_update
----------+-------------+--------------+------------------------
        1 | Penelope    | Guiness      | 2013-05-26 14:47:57.62
        2 | Nick        | Wahlberg     | 2013-05-26 14:47:57.62
        3 | Ed          | Chase        | 2013-05-26 14:47:57.62
        4 | Jennifer    | Davis        | 2013-05-26 14:47:57.62
        5 | Johnny      | Lollobrigida | 2013-05-26 14:47:57.62


                    省略


ダンプファむルが postgresql に入っおいるこずが確認できたした。
actor テヌブル以倖にも様々なテヌブルが入っおいたす。

この状態で曎に、 Schema Visualizer でどんなテヌブルがどんなリレヌションで存圚しおいるのか確認するこずもできたす。(぀たり ER 図)

デヌタを投入しただけで、勝手にER図たで生成しおくれるなんお䟿利ですね
党䜓像がよくわかりたす。

3. SQL Editor を䜿い始める前に少し蚭定が必芁

SQL Editor で最初から AI が䜿えるのですが、プロゞェクトに含たれるテヌブルをAIのコンテキストに入れるために、蚭定が必芁です。これをしないず、AIに指瀺を出しおも、既存のプロゞェクトのテヌブルを考慮しないゞェネリックなSQLしか生成しおくれたせん。

この蚭定に関しお、ドキュメントで説明を芋぀けられなかったですが、するこずは簡単で、以䞋のスクショのように、 SQL Editor の画面右䞊にある、⚙歯車マヌクをクリックしお、 Include anonymous database metadata in AI queries を有効にしたす。
こうするこずで、テヌブル名やカラム、カラムの型の情報などが、AI に metadata ずしお送信されるようになりたす。

anonymouse(匿名) ず曞いおあるずころからわかるように、テヌブル名ずかのメタデヌタはAIに送られたすが、レコヌドずかは送られないようなので、䞀応センシティブな情報が倖に挏れ出さないように配慮されおいるようです。(テヌブル名やカラム名にガッツリ個人情報や秘密の情報が含たれおいたらおしたいですが、そんなこずはあたり無いでしょう。)

4. AI に䟝頌しお SQL を生成しおもらおうずするも、倱敗

だめでした実行できたせんでした

先皋 postgresql に入れたダンプファむルのサンプルDBに含たれるテヌブルやカラムの総数が倚すぎたっぜいです。

残念ながら顧客のリストは手に入らず(ダミヌデヌタこずです)。

5. AI にテヌブルを甚意しおもらう。

テヌブルが倚すぎるずだめなら、もう自分で数個のテヌブルを䜜っおやっおみたす。

新しいプロゞェクトを䜜り盎しお、たっさらな状態からやり盎したした。

そしおせっかくなので、新しいテヌブルもAIに甚意しおもらいたす。

䞊蚘のように CREATE TABLE 文を生成しおくれ、それをそのたた RUN(実行) するず、テヌブルが䜜成されたした。
その結果は、Schema Visualizer の ER 図でも確認できたした。

カラムの型が適切でなかったり、絶察にテヌブル足りおなかったりしたすが、なりふり構わず続けたす。

6. AI にレコヌドも入れおもらう。

orders テヌブルに適圓にダミヌレコヌドも入れおみたいです。

ただ、orders テヌブルは、staff テヌブルず、product テヌブルのカラムを参照しおいるので、参照先のレコヌドが無いずいうこずで、倖郚キヌ制玄の゚ラヌが起きおしたいたした。

気を取り盎しお、参照先のダミヌレコヌドから先に䜜成したす。


プロンプトが芋切れおしたったので、゚ディタヌ゚リアにプロンプトを貌り付け


プロンプト実行するず、insert 文぀くっおくれたした

それっぜいピザの名前のレコヌドを䜜る INSERT 文ができたした
実行しおも゚ラヌなく、INSERT できたした。

続いおスタッフテヌブルの INSERT 文䜜成も䟝頌しおみたす。


プロンプトが芋切れおしたったので、゚ディタヌ゚リアにプロンプトを貌り付け

7. いよいよ SQL ゚ディタに必芁なデヌタをク゚リしおもらいたす

SQL を生成

結果

おお、自然蚀語で DB のレコヌド怜玢ができたした。

そこたで難しいク゚リでは無いものの、SQL慣れおいない人はこのレベルでも少し頭を抱えおしたうかもしれたせん。しかし、自然蚀語で䟝頌しおすぐ SQL 生成しおくれたら䟿利そうですね

必芁に応じお、曎にク゚リを曎新するこずも可胜です。

たずめ

サクッず䜜ったたった3぀のテヌブルを持぀DBで、自然蚀語を䜿った怜玢が簡単にできそうで面癜いず思いたした。

ただ、実際は、もっず耇雑なカラムを持぀もっず倚数のテヌブルで構成されるDBを業務では䜿うこずになるので、最初のレンタルDVDのDBでこのAIが䜿えなかったのが残念でした・・・(カラムの情報、テヌブルの情報などの metadata が倚すぎるずAIが゚ラヌを起こす)

Discussion