🦣

postgresqlの基本を理解(Supabaseをきっかけに)

2023/04/02に公開

Supabase触っておいてよかった

今回postgresqlを触るきっかけとなったのは、Supabaseを触っていたからです。
SupabaseのDatabaseやStorageと連携してAPIを作成する作業を行っていました。Databaseに関してテーブルを作成し、そこからからデータ取得する形を実現する予定でした。
https://zenn.dev/eno49/articles/aecfc4758457f1
マネジメントコンソールを見ていたら、RLSという単語に出会いました。mysqlしか触っていなかった自分は、なんだこれは?となりました。またこのRLSを有効化しないとデータ取得ができないことも知りました。
そこからpostgresqlをもう少し掘りこんでいみようと思いました。

環境構築

私は既にDockerをインストール済みなので、Dockerを用いて行いました。基本的には以下記事を参考にして実施しました。
https://zenn.dev/re24_1986/articles/b76c3fd8f76aec
記事内の以下セクションについて実施してみました。(初期データ投入の方法も併せて確認したかったため)

(2)postgres構築後にSQLを実行する

Dockerを使わずに構築する場合は、以下記事が参考になりました
https://salaryman-kurashi.com/sql-env/

ロール・ユーザに対する理解

AWSを既に触っていた関係で、IAMと似た部分があるな~と思いながらやっていました。
https://eng-entrance.com/postgresql-role
パスワードの設定も併せて実施する場合などは、以下記事も参考になりました。
https://postgresweb.com/createuser

RLSに対する理解

そもそもどういった状況で必要になるのか
https://times.hrbrain.co.jp/entry/postgresql-row-level-security
公式
https://www.postgresql.org/docs/current/ddl-rowsecurity.html

実際にテーブルを作成して実施してみる
https://labs.septeni.co.jp/entry/2022/03/28/193223

この作業をする中でテーブル一覧を確認、現在選択しているスキーマ、ユーザなど
いくつかコマンドを叩いて確認する場面がありました。
それらの基本的なコマンドを載せている記事があったので、それを参考に都度実行してました。
https://dev.classmethod.jp/articles/postgresql-organize-command/

Policyに対する理解

上記RLSに関する適用とPolicy作成で、ポリシーに関する理解やどういったポリシーを作成する可能性があるのか、そのあたりをもう少しみていきます。
追記できそうな情報がある場合は、ここに追記していきたいと思います。

思ったこと

MySQLとの違いで感じることが多かったような気がします。

テーブルのownerが存在

MySQLでそういうのあったっけ?って思いながらやっていました。
実際はなさそうでしたけれども。

https://stackoverflow.com/questions/54486930/how-to-manage-table-ownership-in-mysql

\dtコマンドでテーブル一覧を表示すると、Ownerという項目があり、なんとなく管理者、といったイメージはできるものの・・・

そのあとの作業で、作成したテーブルにRLS適用しようと以下コマンドを実行しました。

ALTER TABLE users ENABLE ROW LEVEL SECURITY;

すると、以下のように怒られました。

ERROR:  must be owner of table users

先ほどの画像のOwnerには、postgresと記載されていました。この時私はsales_company_001というユーザでログインしてこの作業をしていました。

  • 管理者以外が更新作業できないようにするのは当然のことかもしれないですが、こういった適切でない形で操作をすることで発見できることも多々あるので、よかったです。
コマンド、慣れるまで少し時間かかるな

慣れの問題、といえばそれまでです。
mysqlと同じようなコマンドは特に気にしてませんでしたが、

drop table <TABLE_NAME>;

以下コマンドからどんな出力になるのか
実際はスキーマ一覧が表示されますが、n???ってなっていました。dがdisplayというのは頷けましたが・・

\dn

Discussion