SlideShare a Scribd company logo
© 2023 NTT DATA Corporation
1日5分でPostgreSQLに詳しくなるアプリの開発
~PostgRESTを使ってみた~
2023/1/27 第38回 PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部 石井愛弓
© 2023 NTT DATA Corporation 2
はじめに
© 2023 NTT DATA Corporation 3
今回のモチベーション
• PostgRESTを使ってみたい!
• モダンなフロントエンド(React)を書いてみたい!
さらに…
• PostgreSQLに詳しくなりたい!
• 英語の学習習慣をつけたい!
というモチベーションでwebアプリを実装しました!
名付けて「1日5分でPostgreSQLに詳しくなるアプリ just for myself」。
© 2023 NTT DATA Corporation 4
全体像
Reactで作成したwebアプリから、PostgRESTのAPIを呼び出す。
PostgRESTはPostgreSQLからデータを取得し、JSONレスポンスを返す。
PostgreSQL
PostgREST
React
API
JSON
SQL
レスポンス
© 2023 NTT DATA Corporation 5
PostgRESTの概要
© 2023 NTT DATA Corporation 6
PostgRESTとは
PostgreSQLのデータベースに対してRESTful APIの形式でアクセスできるようにするwebサー
バー。
例えば…ToDoテーブル
Id done task due
1 false 洗濯 null
2 false 掃除 null
3 false 料理 null
curl http://localhost:3000/todos
{“id”:1, “done”:false, “task”:”洗濯”, “due”:null},
{“id”:2, “done”:false, “task”:”掃除”, “due”:null},
{“id”:3, “done”:false, “task”:”料理”, “due”:null}
https://postgrest.org/en/stable/
© 2023 NTT DATA Corporation 7
一部の列だけを出力することも可能
カラムを指定しない場合はすべてのカラムを表示する
一部のカラムのみ取得したい場合は、selectを使う
例)peopleテーブルのfirst_nameカラムとageカラムだけ取得する
GET /people?select=first_name,age
[
{"first_name": "John", "age": 30},
{"first_name": "Jane", "age": 20}
]
取得する際に、リネームやキャストも可能
• :でリネーム
• GET /people?select=fullName:full_name,birthDate:birth_date
• ::でキャスト
• GET /people?select=full_name,salary::text
© 2023 NTT DATA Corporation 8
条件を使用して行を絞り込むことも可能
様々な演算子を利用できる
例)peopleテーブルの18歳以上の学生
• GET /people?age=gte.18&student=is.true
PostgreSQL
の場合
演算子
= eq
> gt
>= gte
< lt
<= lte
<> or != neq
LIKE like
ILIKE ilike
~ match
~* imatch
IN in
IS is
@@ fts
PostgreSQL
の場合
演算子
@> cs
<@ cd
&& ov
<< sl
>> sr
&< nxr
&> nxl
-|- adj
NOT not
OR or
AND and
さらに複雑なフィルタを使うために
は、ビューを作るか、ストアドプロ
シージャを使う必要がある。
© 2023 NTT DATA Corporation 9
JSON, JSONB
Jsonやjsonbのカラムの要素を取り出す、絞り込むことも可能
GET /people?select=id,json_data->blood_type&json_data->>blood_type=eq.A-
[
{ "id": 1, "blood_type": "A-" },
{ "id": 3, "blood_type": "A-" },
{ "id": 7, "blood_type": "A-" }
]
© 2023 NTT DATA Corporation 10
テーブルへのアクセス権限に応じて、APIを実行できる
APIの実行権限は、テーブルへのアクセス権限に対応する
例)PostgreSQLで参照のみ権限付与
→APIも参照のみ可能になる
→401 Unauthorizedのレスポンスになる
curl http://localhost:3000/todos -X POST ¥
-H "Content-Type: application/json" ¥
-d '{"task": "do bad thing"}'
grant select on api.todos to web_anon;
{
"hint": null,
"details": null,
"code": "42501",
"message": "permission denied for table todos"
}
© 2023 NTT DATA Corporation 11
データ型
様々なデータ型を扱うことができる。
これにより、now(timestamp型)やyes(bool型)などの特別な値も使用できる。
• Timestamp
• JSON
• Arrays
• Composite Types
• Ranges
• Bytea
• Hstore
• PostGIS
© 2023 NTT DATA Corporation 12
SQLとAPIの対応
SELECT : GET
INSERT : POST
UPDATE : PATCH
UPSERT : POST
DELETE : DELETE
curl "http://localhost:3000/people" ¥
-X POST -H "Content-Type: text/csv" ¥
--data-binary @- << EOF
name,age,height
J Doe,62,70
Jonas,10,55
EOF
curl "http://localhost:3000/employees" ¥
-X POST -H "Content-Type: application/json" ¥
-H "Prefer: resolution=merge-duplicates" ¥
-d @- << EOF
[
{ "id": 1, "name": "Old employee 1", "salary": 30000 },
{ "id": 2, "name": "Old employee 2", "salary": 42000 },
{ "id": 3, "name": "New employee 3", "salary": 50000 }
]
EOF
Bulk INSERT
UPSERT
curl "http://localhost:3000/table_name" ¥
-X POST -H "Content-Type: application/json" ¥
-d '{ "col1": "value1", "col2": "value2" }'
INSERT
© 2023 NTT DATA Corporation 13
インストール
© 2023 NTT DATA Corporation 14
PostgreSQL の準備
スキーマの作成
create schema api;
テーブルの作成
create table api.todos (
id serial primary key,
done boolean not null default false,
task text not null,
due timestamptz
);
データの挿入
insert into api.todos (task) values
('finish tutorial 0'), ('pat self on back');
ロールの作成
create role web_anon nologin;
grant usage on schema api to web_anon;
grant select on api.todos to web_anon;
ログイン用ロールの作成
create role authenticator noinherit login password
'mysecretpassword';
grant web_anon to authenticator;
© 2023 NTT DATA Corporation 15
PostgREST インストール
• githubのリリースページからバイナリをダウンロード(最新版はv10.1.1)
• https://github.com/PostgREST/postgrest/releases/tag/v10.1.1
• 設定ファイルを準備(test.conf)
• 起動
• ./postgrest test.conf
→これだけでOK!
curl http://localhost:3000/todos でレスポンスが返ってくる!
db-uri = "postgres://authenticator:mysecretpassword@localhost:5432/postgres"
db-schemas = "api"
db-anon-role = "web_anon"
© 2023 NTT DATA Corporation 16
アプリを作ってみる
© 2023 NTT DATA Corporation 17
どんなアプリ?
PostgreSQLのリリースノートを1日1個理解していくためのアプリ。Just for myself
「理解した」「とりあえず読んだ」「また今度読む」を押していく
© 2023 NTT DATA Corporation 18
デモ
© 2023 NTT DATA Corporation 19
おまけ機能1:何度もとりあえず読む
エビングハウスの忘却曲線をヒントに、繰り返し学習する。
短期記憶はすぐに忘れるので、繰り返すこ
とで長期記憶になる
※今回は覚えるというより理解することが
目的なので、記憶の問題ではない。が、や
はり、繰り返すことで、理解が進む側面も
あるのではないか、と考えたので参考にした。
「理解した」ものはもう表示しない
「とりあえず読んだ」項目については翌日
も表示して理解できるまで何度も出会う
「また今度読む」は三日後にまた表示する
bは節約率(%)、tは時間(分)
© 2023 NTT DATA Corporation 20
ノートテーブルの次の出現スケジュール(next_date)を更新
次の出現スケジュール(next_date) が 今日の日付 または 今日より前 の件数が今日のノルマ
↑
NULL
↑
+3日
↑
+1日
GET /releasenotes?next_date=lte.today&limit=1
PATCH /releasenotes?id=eq.1 -d '{ "next_date": null }
© 2023 NTT DATA Corporation 21
おまけ機能2:代わりに読んで~
英語を読む気力がないときも、読み上げた英語を聴くだけならハードルが下がる?と考え採用
無料APIのWeb Speech APIを使って英語を読み上げ
※デモあり
© 2023 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot

What's hot (20)

あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 

Similar to 1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)

文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
Hiroshi Tokumaru
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
エイシュン コンドウ
 

Similar to 1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発表資料) (20)

文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
 
zozotown real time linkage infrastructure
zozotown real time linkage infrastructurezozotown real time linkage infrastructure
zozotown real time linkage infrastructure
 
show コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudyshow コマンド結果をパースする方法あれこれ #npstudy
show コマンド結果をパースする方法あれこれ #npstudy
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介Postgre sql9.3新機能紹介
Postgre sql9.3新機能紹介
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
 
20150209 甲府-web新世紀2
20150209 甲府-web新世紀220150209 甲府-web新世紀2
20150209 甲府-web新世紀2
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
Teclab3
Teclab3Teclab3
Teclab3
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
ニフティクラウド Mobile backendとio tの良い関係
ニフティクラウド Mobile backendとio tの良い関係ニフティクラウド Mobile backendとio tの良い関係
ニフティクラウド Mobile backendとio tの良い関係
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)
Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
[Japan Tech summit 2017] APP 006
[Japan Tech summit 2017]  APP 006[Japan Tech summit 2017]  APP 006
[Japan Tech summit 2017] APP 006
 

More from NTT DATA Technology & Innovation

More from NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (12)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 

1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2023 NTT DATA Corporation 1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~ 2023/1/27 第38回 PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 技術開発本部 石井愛弓
  • 2. © 2023 NTT DATA Corporation 2 はじめに
  • 3. © 2023 NTT DATA Corporation 3 今回のモチベーション • PostgRESTを使ってみたい! • モダンなフロントエンド(React)を書いてみたい! さらに… • PostgreSQLに詳しくなりたい! • 英語の学習習慣をつけたい! というモチベーションでwebアプリを実装しました! 名付けて「1日5分でPostgreSQLに詳しくなるアプリ just for myself」。
  • 4. © 2023 NTT DATA Corporation 4 全体像 Reactで作成したwebアプリから、PostgRESTのAPIを呼び出す。 PostgRESTはPostgreSQLからデータを取得し、JSONレスポンスを返す。 PostgreSQL PostgREST React API JSON SQL レスポンス
  • 5. © 2023 NTT DATA Corporation 5 PostgRESTの概要
  • 6. © 2023 NTT DATA Corporation 6 PostgRESTとは PostgreSQLのデータベースに対してRESTful APIの形式でアクセスできるようにするwebサー バー。 例えば…ToDoテーブル Id done task due 1 false 洗濯 null 2 false 掃除 null 3 false 料理 null curl http://localhost:3000/todos {“id”:1, “done”:false, “task”:”洗濯”, “due”:null}, {“id”:2, “done”:false, “task”:”掃除”, “due”:null}, {“id”:3, “done”:false, “task”:”料理”, “due”:null} https://postgrest.org/en/stable/
  • 7. © 2023 NTT DATA Corporation 7 一部の列だけを出力することも可能 カラムを指定しない場合はすべてのカラムを表示する 一部のカラムのみ取得したい場合は、selectを使う 例)peopleテーブルのfirst_nameカラムとageカラムだけ取得する GET /people?select=first_name,age [ {"first_name": "John", "age": 30}, {"first_name": "Jane", "age": 20} ] 取得する際に、リネームやキャストも可能 • :でリネーム • GET /people?select=fullName:full_name,birthDate:birth_date • ::でキャスト • GET /people?select=full_name,salary::text
  • 8. © 2023 NTT DATA Corporation 8 条件を使用して行を絞り込むことも可能 様々な演算子を利用できる 例)peopleテーブルの18歳以上の学生 • GET /people?age=gte.18&student=is.true PostgreSQL の場合 演算子 = eq > gt >= gte < lt <= lte <> or != neq LIKE like ILIKE ilike ~ match ~* imatch IN in IS is @@ fts PostgreSQL の場合 演算子 @> cs <@ cd && ov << sl >> sr &< nxr &> nxl -|- adj NOT not OR or AND and さらに複雑なフィルタを使うために は、ビューを作るか、ストアドプロ シージャを使う必要がある。
  • 9. © 2023 NTT DATA Corporation 9 JSON, JSONB Jsonやjsonbのカラムの要素を取り出す、絞り込むことも可能 GET /people?select=id,json_data->blood_type&json_data->>blood_type=eq.A- [ { "id": 1, "blood_type": "A-" }, { "id": 3, "blood_type": "A-" }, { "id": 7, "blood_type": "A-" } ]
  • 10. © 2023 NTT DATA Corporation 10 テーブルへのアクセス権限に応じて、APIを実行できる APIの実行権限は、テーブルへのアクセス権限に対応する 例)PostgreSQLで参照のみ権限付与 →APIも参照のみ可能になる →401 Unauthorizedのレスポンスになる curl http://localhost:3000/todos -X POST ¥ -H "Content-Type: application/json" ¥ -d '{"task": "do bad thing"}' grant select on api.todos to web_anon; { "hint": null, "details": null, "code": "42501", "message": "permission denied for table todos" }
  • 11. © 2023 NTT DATA Corporation 11 データ型 様々なデータ型を扱うことができる。 これにより、now(timestamp型)やyes(bool型)などの特別な値も使用できる。 • Timestamp • JSON • Arrays • Composite Types • Ranges • Bytea • Hstore • PostGIS
  • 12. © 2023 NTT DATA Corporation 12 SQLとAPIの対応 SELECT : GET INSERT : POST UPDATE : PATCH UPSERT : POST DELETE : DELETE curl "http://localhost:3000/people" ¥ -X POST -H "Content-Type: text/csv" ¥ --data-binary @- << EOF name,age,height J Doe,62,70 Jonas,10,55 EOF curl "http://localhost:3000/employees" ¥ -X POST -H "Content-Type: application/json" ¥ -H "Prefer: resolution=merge-duplicates" ¥ -d @- << EOF [ { "id": 1, "name": "Old employee 1", "salary": 30000 }, { "id": 2, "name": "Old employee 2", "salary": 42000 }, { "id": 3, "name": "New employee 3", "salary": 50000 } ] EOF Bulk INSERT UPSERT curl "http://localhost:3000/table_name" ¥ -X POST -H "Content-Type: application/json" ¥ -d '{ "col1": "value1", "col2": "value2" }' INSERT
  • 13. © 2023 NTT DATA Corporation 13 インストール
  • 14. © 2023 NTT DATA Corporation 14 PostgreSQL の準備 スキーマの作成 create schema api; テーブルの作成 create table api.todos ( id serial primary key, done boolean not null default false, task text not null, due timestamptz ); データの挿入 insert into api.todos (task) values ('finish tutorial 0'), ('pat self on back'); ロールの作成 create role web_anon nologin; grant usage on schema api to web_anon; grant select on api.todos to web_anon; ログイン用ロールの作成 create role authenticator noinherit login password 'mysecretpassword'; grant web_anon to authenticator;
  • 15. © 2023 NTT DATA Corporation 15 PostgREST インストール • githubのリリースページからバイナリをダウンロード(最新版はv10.1.1) • https://github.com/PostgREST/postgrest/releases/tag/v10.1.1 • 設定ファイルを準備(test.conf) • 起動 • ./postgrest test.conf →これだけでOK! curl http://localhost:3000/todos でレスポンスが返ってくる! db-uri = "postgres://authenticator:mysecretpassword@localhost:5432/postgres" db-schemas = "api" db-anon-role = "web_anon"
  • 16. © 2023 NTT DATA Corporation 16 アプリを作ってみる
  • 17. © 2023 NTT DATA Corporation 17 どんなアプリ? PostgreSQLのリリースノートを1日1個理解していくためのアプリ。Just for myself 「理解した」「とりあえず読んだ」「また今度読む」を押していく
  • 18. © 2023 NTT DATA Corporation 18 デモ
  • 19. © 2023 NTT DATA Corporation 19 おまけ機能1:何度もとりあえず読む エビングハウスの忘却曲線をヒントに、繰り返し学習する。 短期記憶はすぐに忘れるので、繰り返すこ とで長期記憶になる ※今回は覚えるというより理解することが 目的なので、記憶の問題ではない。が、や はり、繰り返すことで、理解が進む側面も あるのではないか、と考えたので参考にした。 「理解した」ものはもう表示しない 「とりあえず読んだ」項目については翌日 も表示して理解できるまで何度も出会う 「また今度読む」は三日後にまた表示する bは節約率(%)、tは時間(分)
  • 20. © 2023 NTT DATA Corporation 20 ノートテーブルの次の出現スケジュール(next_date)を更新 次の出現スケジュール(next_date) が 今日の日付 または 今日より前 の件数が今日のノルマ ↑ NULL ↑ +3日 ↑ +1日 GET /releasenotes?next_date=lte.today&limit=1 PATCH /releasenotes?id=eq.1 -d '{ "next_date": null }
  • 21. © 2023 NTT DATA Corporation 21 おまけ機能2:代わりに読んで~ 英語を読む気力がないときも、読み上げた英語を聴くだけならハードルが下がる?と考え採用 無料APIのWeb Speech APIを使って英語を読み上げ ※デモあり
  • 22. © 2023 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。