Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQLクエリプロトコルの実証 / Demonstration of Postgr...

kabaome
April 24, 2020

PostgreSQLクエリプロトコルの実証 / Demonstration of PostgreSQL Query Protocol

kabaome

April 24, 2020
Tweet

More Decks by kabaome

Other Decks in Technology

Transcript

  1. サーバ or クライアントのコードを読む ? 実践で使われている◎ 高度に最適化されている△ Name Language Comments Website

    DBD::Pg Perl Perl DBI driver https://metacpan.org/release/DBD-Pg JDBC Java Type 4 JDBC driver https://jdbc.postgresql.org/ libpqxx C++ C++ interface http://pqxx.org/ node-postgres JavaScript Node.js driver https://node-postgres.com/ Npgsql .NET .NET data provider http://www.npgsql.org/ pgtcl Tcl https://github.com/flightaware/Pgtcl pgtclng Tcl https://sourceforge.net/projects/pgtclng/ pq Go Pure Go driver for Go's database/sql https://github.com/lib/pq psqlODBC ODBC ODBC driver https://odbc.postgresql.org/ psycopg Python DB API 2.0-compliant http://initd.org/psycopg/ https://www.postgresql.org/docs/12/external-interfaces.html
  2. 簡易クエリ (データなし)  I (73) => トランザクションブロック外(Idle)  T (84) => トランザクションブロック内(Tran)

     E (69) => トランザクションブロック内(Error)  挿入先テーブルのOID(ない場合は「0」)と、
  挿入した行数
  3. 簡易クエリ (データあり) Server Client Query RowDescription DataRow DataRow CommandComplete ReadyForQuery

    行の応答が返ることを示し、
 行のデータを解釈する情報を含む 行ごとのメッセージとして
 データを取得する
  4. 簡易クエリの内部 Server Client Query RowDescription DataRow DataRow CommandComplete ReadyForQuery parse

    bind execute SQLを構文解析し、
 プリペアド文を生成する プリペアド文からポータルを生成し、 実行計画を生成する ポータルを実行し、
 リレーションを取得する
  5. 拡張クエリ Server Client Parse ParseComplete Bind BindComplete Describe Execute Sync

    ReadyForQuery DataRow DataRow CommandComplete RowDescription SQLを構文解析し、
 プリペアド文を生成する プリペアド文からポータルを生成し、 実行計画を生成する ポータルを実行し、
 リレーションを取得する サーバ・クライアントの状態を
 同期する
  6. 簡易クエリと拡張クエリ 簡易クエリ 拡張クエリ 実行の流れ 簡易 詳細 パラメータバインド 利用できない 利用できる メリット

    実装しやすい 性能・セキュリティ 利用シーン psqlやPgAdmin等のツール クライアントライブラリ