ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

プログラミング

VS Code と GDB で PostgreSQL をデバッグする

VS Code + GDB でリモートデバッグする手順について PostgreSQL を題材に解説します。

VS Code Remote - SSH extension で Linux のリモートマシンに接続すると VS Code Server が自動でインストールされる

VS Code Remote - SSH extension は初回接続時に VS Code Server をリモートサーバのホームディレクトリにインストールしています。

SQL の COUNT(*) と COUNT(1) の結果は同じ

SQL の COUNT(*) と COUNT(1) は同じ結果が得られます。また、COUNT() 内の定数が何であっても結果は同じです。

SELECT-INSERT で SELECT に ORDER BY を指定するとソートが実行される

リレーショナルモデルは集合を扱い、行の順序を意識しないはずです。なのになぜ SELECT-INSERT の SELECT で ORDER BY できるのか…という疑問と検証を書き留めています。

PostgreSQL のテーブル継承は概念データモデルのスーパータイプ/サブタイプを実装する手段では無い

PostgreSQL にはテーブルの継承という機能があります。 本記事ではテーブル継承を概念データモデルのスーパータイプ/サブタイプの実装に用いると、どのような問題が出るかを見ていきます。

SQL で ORDER BY をクエリの最後にしか記述できず、結果セット全体にしか適用できない理由

SQL で ORDER BY の指定はクエリの最後に記述する必要があります。また、ORDER BY は結果セット全体に対して行われます。 この理由を理論面(リレーショナルモデル)と設計面 (SQL) からみていきます。

「はじめて学ぶソフトウェアのテスト技法」の読解メモ

「はじめて学ぶソフトウェアのテスト技法」は特に前半のパートで誤記や説明不足な箇所が目立ちます。そこで、これらを補足する目的で本記事をまとめることにしました。

RDB が ROLLBACK の処理コストを支払うタイミング

Oracle Database と PostgreSQL の ROLLBACK の差について検証と考察を行いました。そこで見えてきたのは ROLLBACK の処理コストを支払うタイミングの違いでした。

PostgreSQL は更新処理を ROLLBACK してもテーブルファイルに追記される

PostgreSQL はテーブルに対する更新処理を行うと、最終的に ROLLBACK した場合でもテーブルファイルに追記されます。本エントリではこの挙動を検証します。

デブサミ2020「【13-B-4】質とスピード」聴講メモ

はじめに Developers Summit 2020 Winter (Developers Summit 2020) 質とスピード スピーカー:和田 卓人 [タワーズ・クエスト] の聴講メモです。メモは口頭説明を中心にまとめています。資料を併せてご参照ください。 Twitterのつぶやきがtogetterでまとめ…

PostgreSQLのトランザクション分離レベル毎のパフォーマンス測定(に失敗しました)

PostgreSQL のベンチマーク試験コマンドである pgbench でトランザクション分離レベルのパフォーマンス測定にチャレンジしましたが、この手法には問題があるとわかりました。この問題点をまとめます。

集合に含まれない組み合わせをクエリで抽出する

集合に含まれない組み合わせをクエリで抽出する手法について、データベーススペシャリスト試験の問題を用いて解説します。

SQLの外部結合の実行ステップを理解する

外部結合はクロス結合をベースとし、そこから保存対象外の行を削除します。この流れを「プログラマのためのSQL」の原書をベースに補足しながら解説します。

データベースはレコード・フィールドではなく、行・列と表現すべき

Joe Celko はデータベースにおいて、行・列という用語を使うべきであり、レコード・フィールドという表現は適切でないと主張しています。これは論理的存在と物理的存在を分けるべきとの考えからです。

PostgreSQL にてWHERE句で=演算子の左辺・右辺に同じ列名を指定すると行数推定が不正確になることがある

PostgreSQL 10 以前では WHERE 句で = 演算子の左辺・右辺に同じ列名を指定すると、行数推定が不正確になることがあります。この問題は PostgreSQL 11 で改良されました。

DBTS2018「今後のDBのトランザクション処理のあり方について徹底討議する」パネラー参加記録

始めに db tech showcase Tokyo 2018 (db tech showcase Tokyo 2018 | db tech showcase) 今後のDBのトランザクション処理のあり方について徹底討議する ~"InvisibleWriteRule: トランザクションの書込み最適化" を中心に にパネラーとして参加してきました…

トランザクションをもっと深く知るための資料集

データベースを扱う方にとって、トランザクションは当たり前の存在です。そんな当たり前のものがどういった理論と技術で実現されているか、そしてそれらが今も進化していることをご存知でしょうか。トランザクションをもっと深く知りたい方に向けて、参考と…

PostgreSQLのシリアライザブルとコミット/ロールバックと遅延可能な読み取り専用トランザクションの関係

はじめに PostgreSQLのトランザクション分離レベルにはシリアライザブル(Serializable)があります。ドキュメントのシリアライザブル分離レベルの説明には以下の記載があります。 異常を防止するためにシリアライザブルトランザクションを使用するのであれば…

Bitmap Index Scan の後の Bitmap Heap Scan でRecheck処理が行われることの解説

PostgreSQL の実行計画において、Bitmap Index Scan の後に実行される Bitmap Heap Scan で "Recheck cond" と出力されます。Index Scan をしているにも関わらず、なぜ Heap Scan でインデックスの検索条件を再チェックする必要があるのか解説します。

SQLの GROUP BY 句には列名だけでなく式も記述することができる

はじめに 「達人に学ぶSQL徹底指南書」(以下、達人SQL)の「1-1 CASE式のススメ」には GROUP BY 句に CASE 式の含まれるSQLが登場します。達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)作者: ミック出版社/メーカー: 翔泳社発売日: 2008/02/07メディア: 単行…

SQLのGROUP BY句の処理を理解する

SQLのGROUP BY句の解説記事は多くありますが、本エントリでは他の記事とは解説方法を変え、処理の段階を追って説明します。また、CASE式との組み合わせにも触れます。

PostgreSQLの実行計画の実行順とコスト・実行時間の累積

はじめに PostgreSQLの実行計画の読み解き方は公式マニュアルで説明されています。PostgreSQL 10 でのリンクを示します。 14.1. EXPLAINの利用ですが、若干分かり辛い個所があるため、本エントリでは以下の観点に着目して補足することにします。 ノードの実…

ネストしたサブクエリにOR条件を含むSQLのパフォーマンスをPostgreSQLで改善する

はじめに ネストしたサブクエリ(副問合せ)はEXISTS条件でよく利用されます。ですが、このサブクエリのフィルタ条件次第ではパフォーマンス問題となることがあります。これを Oracle Database で改善する例がOracleの記事(以下、「記事」とだけ表記した場…

Oracle Database の LNNVL を PostgreSQL で実現する

Oracle Database には LNNVL というファンクションがあります。 LNNVL(condition) LNNVL の説明を Oracle Database 12c R2 マニュアルから引用します。 LNNVLは、条件のオペランドの1つまたは両方がNULLの可能性がある場合にその条件を簡単に評価する方法を…

デブサミ2018「【16-C-3】Gitで安定マスターブランチを手に入れる」聴講メモ

はじめに Developers Summit 2018 (Developers Summit 2018) 【16-C-3】Gitで安定マスターブランチを手に入れる スピーカー:井上 誠一郎 さん [ワークスアプリケーションズ] / 三宅 泰裕 さん [ワークスアプリケーションズ]) の聴講メモです。メモは口頭…

デブサミ2018「【16-A-2】ヤフーを支える社内システム」聴講メモ

はじめに Developers Summit 2018 (Developers Summit 2018) 【16-A-2】ヤフーを支える社内システム スピーカー:伊藤 康太 さん [ヤフー] の聴講メモです。メモは口頭説明を中心にまとめています。資料を併せてご参照ください。 ヤフーを支える社内システム…

PostgreSQLマニュアルのトランザクション分離レベル表を参照する際の注意点

はじめに PostgreSQLマニュアル「13.2. トランザクションの分離」にはトランザクション分離レベルの表が記載されています。この表の記載は9.4以前と9.5以降で変わっており、PostgreSQLの挙動が変わったと勘違いしてしまうかもしれません。ですが、マニュアル…

SerializabilityとMonotonicityとRigorousnessの関係

概要 motononeなスケジュールのクラスでは、スケジュールから任意のトランザクションが消失してもスケジュールのクラスが変わりません。CSRはmonotoneです。CSRだけではabortを扱うのが難しいため、ロックによる手法を組み合わせます。SS2PLによって作られる…

PostgreSQLマニュアルの「リピータブルリード分離レベル」における「制御レコード」とはなにか?

PostgreSQL(9.1以降)マニュアルの「13.2.2. リピータブルリード分離レベル」に以下の記述があります。 リピータブルリードモードでは、全てのトランザクションがデータベースの一貫した不変のビューの状態を参照することが保証されます。 しかし、このビュ…

NTTDATATC2017「本当は恐ろしい分散システムの話」聴講メモ

前書き NTTデータ テクノロジーカンファレンス 2017 (NTTデータ テクノロジーカンファレンス2017 デジタルトランスフォーメーション成功のカギ~ Hadoop, Spark, ブロックチェーン | NTTデータのHadoopソリューション) 【テクノロジー】本当は恐ろしい分散シ…