タグ

ブックマーク / www.nminoru.jp/~nminoru (7)

  • PostgreSQL のメモリ管理関数の解説

    このページでは PostgreSQL のエクステンション(extension)を開発する人向けに、プログラム中で用いるメモリ管理関数を紹介する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2017.03.26) 作成。 (2017.04.02) 共有メモリの利用方法を追加。 目次 1. はじめに 2. MemoryContext を使ったメモリ・アロケーター 2.1 Memory Context API 2.1.1 AllocSetContextCreate 2.1.2 MemoryContext からのメモリ割り当て・解放 2.1.3 MemoryContext の解放・削除 2.2 Out-of-memory エラーの捕捉 2.3 既定のメモリ・コンテキスト 3. 共有メモリの利用方法 コメント 1. はじめに PostgreSQL の C 言語で記述するユ

  • PostgreSQL の覚え書きのインデックス

    PostgreSQL の内部構造の解説 基データ型とタプルの扱い テーブルとブロックのデータ構造 メモリ管理関数の解説 排他制御の概要 プランツリーの概要 プラン最適化の解説 クエリー実行の解説 トランザクション & MVCC & スナップショットの仕組み エクステンションの開発方法 エクステンションの作成方法(Makefile、テスト、リグレッション) 集合を返すユーザー定義関数の書き方 バックグラウンドワーカー(Background Worker)の使い方 外部データラッパー(Foreign Data Wrapper)を作成する カスタムスキャン(Custom Scan)を作成する 独自の手続き言語を作成する 独自のインデックスを作成する コーディングスタイル

  • PostgreSQL のテーブルとブロックのデータ構造

    このページでは PostgreSQL のエクステンション(extension)を開発する人向けに、PostgreSQL のテーブルやインデックスを構成するブロックまたはページの内部構造について紹介する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2017.03.01) 作成。 (2017.03.04) ヒープ操作、システムカタログ、Relation cache entry の説明を追加。 目次 1. はじめに 1.1 PostgreSQL データの構成要素 1.2 Object Identifier (OID) 1.3 データディレクトリ 2. リレーション(Relation) 2.1 リレーションの概要 2.2 データディレクトリ中のリレーションの実体 2.3 リレーションの構造 2.4 API を使った操作 2.4.1 Relation Cache Entr

  • PostgreSQL のコーディングスタイル

    PostgreSQL で C 言語を使ったエクステンション(Extension)を作成する際に必要なコーディングスタイルのメモを残す。 ここで述べているコーディングスタイルは PostgreSQL のソースコードをサンプリングしてこういうルールだろうと類推したものである。 PostgreSQL ソースコード自体にもブレがあり、このルールに沿っていない箇所も多いので、参考までにして欲しい。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2017.01.26) 作成。 目次 1. 公式のコーディング規約 2. 構文 2.1 .c ファイルのヘッダー 2.2 .h ファイルのヘッダー 2.3 コメント 3. 構文 3.1 関数の定義 3.2 ローカル変数の定義 3.3 ステートメント 3.4 if 文のぶら下がり構文 3.5 スペーシング 3.6 可変長構造体 3.7 そ

  • Linux でファイルの変更を検出する(inotify/fanotify)

    inotify (inode-based file event notifications) inotify は Linux 2.6.13 からマージされたファイル報告機能で、指定したディレクトリの直下にあるファイルやディレクトリを監視できる。 監視対象のディレクトリ権限さえあれば監視が可能。 ただし指定ディレクトリから再帰的に監視することはできない。 inotify の監視の流れ以下のようになる。 inotify_init を実行してファイルディスクリプタ(fd)を得る。 inotify_add_watch を使って監視ディレクトリ(watching directory; wd) を登録する。監視ディレクトリは複数登録できる。 ファイル変更イベントは fd を read で読むことで可能である。ファイルが更新するタイミングは fd を select、poll、epoll でも監視できる。

  • PostgreSQL のトランザクション & MVCC & スナップショットの仕組み

    このページでは PostgreSQL のトランザクション(Transaction)、Multi Version Concurrency Control(MVCC)、スナップショット(Snapshot)の仕組みを説明する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2016.04.30) 作成。 (2016.09.16) データ定義言語(DDL)のトランザクションを追加。 (2016.09.28) データ定義言語(DDL)の MVCC アンセーフ動作を追加。 (2017.04.07) Combo Command ID の説明が間違っているのを修正。 目次 1. はじめに 2. トランザクション分離レベル(Transaction Isolation Level) 3. Serializable 以外の分離レベルの実現方法 3.1 トランザクションとと可視性(Visi

  • PostgreSQL プラン・ツリーの概要

    このページでは PostgreSQL のプラン情報を保持するノード・ツリーの概略を解説する。 また PostgreSQL の生成するプランのノード・ツリー情報を可視化するために、Graphviz の dot ファイルとして書き出すエクステンション pg_plan_tree_dot を紹介する。 PostgreSQL 体の改造やエクステンションを作成するために、プランを変更しようとする人向けの記事である。 現在は pg_plan_tree_dot は Linux の PostgreSQL 9.x 上でだけ動作する。 PostgreSQL の他の記事へのインデックスはここ。 更新履歴 (2014.11.30) 作成。 (2015.12.13) エクスプレッション・ノードとプラン・ノードを追加 (2016.09.24) Join と TargetEntry の説明を追加 (2017.01.07

  • 1