Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Write Postgres Extensions with Rust! @matsu7874 2020.12.22 Shinjuku.rs #13
Slide 2
Slide 2 text
自己紹介 ● 松本健太郎 (Kentaro MATSUMOTO) @matsu7874 ● ソフトウェアエンジニア@フォルシア株式会社 ○ Rustでインメモリデータベースを開発 ○ インターンの企画とか技術広報とか ● 興味 ○ Webアプリケーション ○ 技術広報・エンジニア採用 ○ 競技プログラミング 2
Slide 3
Slide 3 text
『実践Rustプログラミング入門』 共著 ● 8月22日発売 ¥3,600(税別) 秀和システム ● 12月1日 Kindle版発売! ● 360/508ページくらい実践的な内容 ○ Webアプリ ○ WebAssembly ○ GUI ○ 組み込み ○ プロダクションで使う話など ● Shinjuku.rsで知り合ったエンジニアで共著 3
Slide 4
Slide 4 text
目次 ● PostgreSQLのユーザー定義関数 ● pgxとは ● デモ 4 参考 『RustでPostgreSQLのユーザー定義関数を書く』 https://www.forcia.com/blog/001560.html
Slide 5
Slide 5 text
PostgreSQLのユーザー定義関数 ● PostgreSQLは関数を定義することができる ● C言語関数と呼ばれるタイプのユーザー定義関数がある ○ 動的ロード可能なオブジェクトファイルとしてコンパイル ○ PL/pgSQL, PL/Pythonより高速! ○ C(もしくはCと互換性のある言語)で作成できる ■ Rustで実装するぞ! 5
Slide 6
Slide 6 text
pgxとは ● RustでPostgreSQL拡張を書くためのフレームワーク ○ Rustを書くとPostgreSQL向けにコンパイルしてくれる ○ バージョン10,11,12,13(2020/09リリースの最新版)に対応 ○ ZomboDBが開発している 6
Slide 7
Slide 7 text
pgxの導入 $ cargo install cargo-pgx $ cargo pgx init 7 ● テスト用のPostgreSQL 10~13がインストールされる
Slide 8
Slide 8 text
サンプルプログラム:コラッツの問題 ● 終了までのループ回数を出力 ● n == 1 ⇒ 終了 ● n%2 == 0 ⇒ n=n/2 ● n%2 == 1 ⇒ n=3*n+1 8
Slide 9
Slide 9 text
C・Rustでの実装例 9
Slide 10
Slide 10 text
構造体を定義する ● pubな構造体を定義して ● #[derive(PostgresType, Serialize, Deserialize)]するとよい ○ assert_eq!観点ではDebug,PartialEqもあるとうれしい 10
Slide 11
Slide 11 text
2種類のテスト ● cargo test ○ Rustの標準的なユニットテスト ● cargo pgx test pg13 ○ PostgreSQL13を使ったテストが書ける 11
Slide 12
Slide 12 text
デモ 12
Slide 13
Slide 13 text
デモ 13
Slide 14
Slide 14 text
デモ 14
Slide 15
Slide 15 text
デモ 15
Slide 16
Slide 16 text
デモ 16
Slide 17
Slide 17 text
ハマったところ ● 構造体xxxに対して、2つの関数が生成される ○ 関数xxx_in(cstring)->xxx ○ 関数xxx_out(xxx)->cstring ○ PostgreSQLに実装されている型、例えばpoint型などと被る ○ 関数定義のSQLを見れば原因がわかる! ● 型パラメータを持った構造体はNG ● 構造体のメソッドは別の関数経由で呼び出す ● pg_externの関数でusizeを引数に取れないがエラーにならない。 17
Slide 18
Slide 18 text
pgxを使ってRustで PostgreSQL拡張を書こう 18