PostgreSQL







オープンソースデータベース
PostgreSQL










Naoyuki Sano
作成日:xxxx年xx月xx日


1. 一般知識:1/x

1-1. PostgreSQL の一般的特徴
・オープンソースの本格的なRDBMS
・Linux、UNIX、Windows、Mac OS Xで動作
・SQL92/99をサポート(SQL標準の機能を網羅)
・クライアント/サーバー構成
・オブジェクト指向機能をサポート
・PostgreSQL Global Development Groupが開発
・協力なトランザクション処理機能(行ロック、読み取り一貫性をサポート)
・大規模ユーザーのサポート(同時接続ユーザー100以上可能)
・大規模データベースのサポート(数十GB規模のDBで実例あり。最近ではTB級も)
・日本国内での導入実績が豊富
例)
  郵便貯金カード普及協会「ゆうちょくらぶ」
   ・PostgreSQLで会員管理システムを構築
   ・1000万ユーザー・24時間・365日に対応する仕様
   ・NTTデータが担当

1. 一般知識:2/x

1-2. ライセンス
・BSDライセンスの特徴
・改変を行った場合、第3者に対してソースコードの開示しなくても良い。
・PostgreSQLをコンパイルしてバイナリ形式で配布できる。
・PostgreSQLを自社製品に組み込んで自由に販売できる。
・ソースコードを閲覧することができる。

1. 一般知識:3/x

1-3. バージョンアップ差異
・7.4と8.0の違い(一部)
・Microsoft Windowsにネイティブ対応
・セーブポイント
・ポイントインタイムリカバリ
・テーブル空間
・バッファ管理、CHECKPOINT、VACUUMの改良
・列データ型の変更(ALTER TABLEで列のデータ型が変更可能になった。)
・COPYにおけるカンマ区切り値書式(CSV)サポート

1. 一般知識:4/x

・8.0と8.1の違い(一部)
・共有バッファキャッシュへの同時アクセスの改良
・インデックススキャンが中間でメモリ内ビットマップを使用可能になった。
・ニ相コミットの追加
・ユーザとグループを置き換える、新しいロールシステムの作成
・MIN() とMAX()におけるインデックスの自動使用
・/contrib/pg_autovacuumを主サーバに移動
・SELECT ... FOR SHAREを使用した共有行レベルロックの追加
・共有オブジェクト、特にロールへの依存性を追加
・テーブルパーティションによる性能向上

1. 一般知識:5/x

・8.1と8.2の違い(一部)
・INSERT/UPDATE/DELETE RETURNINGや複数行のVALUESリスト、
 UPDATE/DELETEにおける省略可能な対象テーブル別名など問い合わせ言語の改良。
・同時に行われるINSERT/UPDATE/DELETE操作をブロックしないインデックス作成。
・外部結合の再順序付けのサポートなどの、多くの問い合わせ最適化の改良。
・ソート処理性能の向上、および、使用するメモリ量の低減。
・より効率的なロックによる同時実行性の向上。
・より効率的なバキューム処理。
・ウォームスタンバイサーバ管理の簡略化。
・テーブルおよびインデックスにおけるFILLFACTORサポート(新機能)。
・監視機能、ログ機能、性能チューニングの追加。
・オブジェクトの生成、削除に関するより細かな制御。
・既存テーブルに対するテーブル継承関係の定義および削除が可能になった。
・COPY TOが任意のSELECT分の出力をコピーできるようになった。
・配列内のNULLなど、配列の改良。
・複数入力集約やSQL:2003の統計処理関数など、集約関数の改良。
・多くのcontrib/の改良。 

1. 一般知識:6/x

・8.2と8.3の違い(一部)
・全文検索がコアデータベースシステムに統合されました。
・SQL/XML標準をサポートしました。これに伴い、新しい演算子とXMLデータ型が含められました。
・列挙データ型(ENUM)
・複合型の配列
・汎用一意識別子(UUID)データ型
・NULLのソートを先にするか後にするかに関する制御を追加
・更新可能カーソル
・サーバ設定パラメータが関数単位で設定可能になりました。
・ユーザ定義型が型修飾子を持つことができるようになりました。
・テーブル定義の変更時または統計情報の更新時における、キャッシュされた問い合わせの自動計画再作成
・ログ処理および統計情報収集における多くの改良
・Windowsにおける認証のためのセキュリティサービスプロバイダインタフェース(SSPI)のサポート
・複数の同時実行autovacuumプロセスのサポート。およびその他のautovacuumの改良
・Microsoft Visual C++を使用したPostgreSQL配布物全体のコンパイルを可能にしました。 

1. 一般知識:7/x

・8.3と8.4の違い(一部)
・ウィンドウ関数
・共通テーブル式および再帰問い合わせ
・関数のデフォルトパラメータおよび可変長パラメータ
・並行リストア
・列権限
・データベース単位のロケール設定
・ハッシュインデックスの改良
・EXISTSおよびNOT EXISTS問い合わせにおける、結合性能の改良
・ウォームスタンバイの使用の簡易化
・空き領域マップの自動サイズ調整
・可視性マップ(変更頻度が少ないテーブルにおけるバキュームオーバーヘッドを大きく低減します)
・バージョンを問わないpsql(古めのサーバに対してもバックスラッシュコマンドが動作します)
・ユーザ認証におけるSSL証明書のサポート
・関数単位の実行時統計情報
・psqlにおける関数編集の簡易化
・新しいcontribモジュール:pg_stat_statements、auto_explain、citext、btree_gin 

(作成中)1. 一般知識:8/x

1-4. リレーショナルデータベースの一般知識
・リレーショナルデータモデルの基本概念
  ― 1970年にE.F.Coddが提唱したモデル。
  ― 実世界をリレーションという2次元に表の集まりで表現。
  ― 集合論がベースとなっている。
  ― 列(カラム)と行(レコード,タプル)で構成される表(テーブル)を使ってデータを格納する。

(作成中)1. 一般知識:9/x

・データベース管理システムの役割
  ―
  ―
  ―
  ―
  ―

(作成中)1. 一般知識:10/x

・SQL一般知識、SQL分類(DDL/DML/DCL)
  ―
  ―
  ―
  ―
  ―

・データベース設計、テーブルの正規化
  ―
  ―
  ―
  ―
  ―

(作成中)2. 運用管理:1/x

2-1. インストール方法
・initdb コマンド
・データベースクラスタの概念
・テンプレートデータベース

(作成中)運用管理:2/x

2-2. 標準付属ツールの使い方
・psql
・pg_ctl
・postmaster
・createdb
・dropdb
・createlang
・droplang
・createuser
・dropuser
・vacuumdb

(作成中)運用管理:3/x

2-3. 設定ファイル
・postgresql.conf
・記述方法
・CONNECTION AND AUTHENTICATION
・CLIENT CONNECTION DEFAULTS
・log_destination
・redirect_stderr
・silent_mode
・log_connections
・log_disconnections
・log_line_prefix

(作成中)運用管理:4/x

2-4. pg_hba.conf

(作成中)運用管理:5/x

2-5. SET 文/SHOW 文の使い方

(作成中)運用管理:6/x

2-6. バックアップ方法
・pg_dump、pg_dumpall、pg_restore、psql コマンドの使い方
・ディレクトリコピーによるバックアップ、リストア
・PITRの概念
・COPY 文と \copy コマンドの使い方

(作成中)運用管理:7/x

2-7. 基本的な運用管理作業
・データベースユーザの追加、削除、変更
・VACUUM、ANALYZE の意味と使い方
・システム情報取得関数(version、current_user、など)
・情報スキーマ、システムカタログ(pg_user、pg_shadow、pg_stats など)
・テーブル単位の権限、GRANT 文/REVOKE 文

(作成中)3. 開発/SQL:1/x

3-1. SQL コマンド
・SELECT 文
  カラム・テーブル指定方法、LIMIT、OFFSET、ORDER BY
  DISTINCT、GROUP BY、HAVING、副問い合わせ
  JOIN(外部結合含む)、EXISTS、IN、問い合わせの結合 (UNION、EXCEPT、INTERSECT)
  条件式 (CASE、COALESCE、NULLIF)
・INSERT 文、UPDATE 文、DELETE 文
・シーケンス
・データ型 (BOOLEAN、文字列、数値、時間、NULL、SERIAL、OID、配列)
・バイナリ列型とラージオブジェクト
・テーブル定義 (制約、デフォルト値、一時テーブル、継承)
・ALTER TABLE、DROP TABLE、CREATE TABLE AS
・インデックス
・ビュー
・ルール、トリガー
・スキーマ
・PREPARE
・カーソル
・ドメイン定義、型定義
・関数定義、PL/pgSQL

(作成中)3. 開発/SQL:2/x

3-2. 組み込み関数
・集約関数 (count、sum、avg、max、min)
・算術関数、演算子
・文字列関数(char_length、lower、upper、substring、replace、trim)
・文字列演算子/述語(||、~、LIKE、SIMILAR TO)
・時間関数 (age、current_date、current_timestamp、current_time、extract、to_char)

(作成中)3. 開発/SQL:3/x

3-3. トランザクション概念
・トランザクションの構文(BEGIN、COMMIT、ROLLBACK、SAVEPOINT、および同義語のSQL)
・トランザクション分離レベル
・暗黙的ロック、LOCK 文、行ロックとテーブルロック
・LISTEN 文/NOTIFY 文