PostgreSQL
PostgreSQLをやってみたいと思って早一年半,ようやく重い腰をあげてみた.引っかかっていたのは,DBで遊ぶためのデータがない,ということだ.この問題は依然残っているが,その内いいネタがなんか見付かるだろう.
PostgreSQLの導入について
PostgreSQLのインストールと設定について.
PostgreSQLのフロントエンドpsqlについて.
psqlでPostgreSQLに接続していろいろ試してみる.
テーブル毎にユーザのアクセス権を設定できる.アクセス権を与えるのがGRANTで奪うのがREVOKEである.
恥かしながら,SQLに関してほとんど忘れてしまったので,PostgreSQLを実際に使用しながらSQL入門してみる.
このページでは練習用DBの問題作成を行なって,以降のページでそれをPostgreSQL上に構築し,その過程でSQL入門していこうと思う.
制約とその指定方法について簡単に記述し,作成した問題に対して,テーブルを作成してみる.
ようやく準備ができたので,データを投入してみた.
DBの構築ができたので,ここから本格的にSQLを試していこうと思う.まずはSELECT.
SELECTに関して前頁で書ききれなかったことを.
なんかアレなタイトルだが,とにかく表を結合したりしてみた.
DBのレコードの更新にはUPDATEを使用する.
DBのレコードの削除にはDELETEを使用する.
仮想的なテーブルVIEWを使用すると頻繁に使用する複雑なSQL文の記述が楽になったりする.RULEはVIEWに対するINSERT,UPDATE,DELETEを行なうのに使用する.
PostgreSQLでのトランザクションについて調査してみた.さらにトランザクションの並列実行時の問題とそれに対処するためのトランザクション隔離レベルとロックについても調査した.
SELECTではLIMITを使用しなければ,選択レコードを一気に出力する.これを任意の件数ずつ取り出すようにするには,カーソルを使用する.
一時テーブル,SELECT文の結果からテーブルを作成,既存テーブルの属性変更などをしてみた.
参照整合性制約に関して,チェックの遅延と複数の外部キーがある場合の注意点について.
シーケンスという連番自動生成機能とシーケンスによるシリアル型について.
PostgreSQLではテーブル間で継承関係を作成できるらしいので試してみた.
ユーザ定義データ型,ユーザ定義関数,クエリのチューニングなど,PostgreSQLでの応用的なことをいろいろやってみる.
PostgreSQLには多くのbuiltin関数があるが,自分で関数を定義することもできる.その定義はいろいろなプログラミング言語で行なうことができるが,ここではSQLによる定義について試してみた.
PostgreSQLではCでユーザ定義関数を定義することができるので,Cでユーザ定義関数を作成してみた.
PostgreSQLではユーザがデータ型を定義することができる.そのためにはCでいくつかの関数を作成,登録する必要がある.ということで,データ型を定義してみた.
トリガはDBへの更新があったときに実行される(CまたはPL/pgSQLで記述した)ユーザ定義関数である.SQL92にはないが,いろろと便利なようなので,調査してみた.
PostgreSQLにおけるDBのメンテナンスについて調査してみた.
インデクスを作成使用すると高速検索ができる場合があるようなので,作成方法と運用時の注意点を調査してみた.
DBに格納するデータは多くの場合,重要で代替の効かないものが多いように思われる.そこで,PostgreSQLでのバックアップ方法について調べてみた.
libpqを使用してPostgreSQLにアクセスするプログラミングをやってみた.
まずlibpqを使用するための環境を整えた.で,接続しないと何にもできないので,libpqを使用してPostgreSQLへ接続する方法を調査してみた.
前頁では同期接続関数を試してみたが,libpqには接続要求を投げてすぐに返ってくる非同期接続関数がある.これを試してみた.
libpqを使用して問い合わせを行なうプログラムを作成してみた.
PGresultから各種データを取得,表示するプログラムを作成してみた.
ecpgを使用してPostgreSQLにアクセスするプログラミングをやってみた.普通サフィックスをpgcとするところを,しばしば間違えてpcgと記述していまっているので注意.
ecpgの概略とはじめるための準備などについて調査してみた.
接続のための記述を通してecpgによるコーディングの基本について調査してみた.
埋め込みSQLによるクエリの発行は簡単である.本頁では特に簡単なものを取り上げる.
埋め込みSQLにおけるNULLの扱いについて調査してみた.
埋め込みで動的なSQLというのはなんだか矛盾するような何かをはらんでいるような気がするのは私だけだろうか...とにかくやってみた.
動的SQLだと,スキーマを事前に予測できない場合がある.記述子領域は,メタデータとデータのデータセットで,これを使用すると,埋め込みSQLでもメタデータを扱えるようになる.
SQLを発行した結果がエラー,警告,選択行なしのいずれかの結果であった場合に,どんな処理をするかをあらかじめ登録することができる.
DBサーバとの接続を同時に複数確立して作業することができる.この際に必要な接続の切替えについて調査してみた.
JDBCを使用してPostgreSQLにアクセスするプログラミングをやってみた.
まずはDBに接続するまでの手順について記述する.JDBCを使用する場合は,いきなり接続するということはできない.libpqを使用する場合はコンパイル時にライブラリと静的リンクしたが,JDBCの場合は,クラスファイルのロードからソースで指定する必要がある.
クエリはStatementのメソッドを使用して発行する.SELECT文はexecuteQuery,それ以外はexecuteUpdateである.
ResultSet,ResultSetMetaDataを中心にSELECT結果の処理について調査してみた.
JDBCのデフォルト動作はautocommitである.Connectionオブジェクトのメソッド呼び出しにより,autocommitのon/offやCOMMIT,ROLLBACKができる.また,きれいな方法ではないがJDBCによるDBアクセスプログラムは,基本的にプログラムでSQL文を生成して発行するだけなので,BEGINとかCOMMITというSQL文を発行すればトランザクション処理ができる.
一部のフィールドの値が異なるだけのSQL文なら,構文解析などを省略して高速化できたりする(といっても,たぶんドライバ次第).このようなSQL文んはStatementのサブインタフェースPreparedStatementの実装クラスで表現される.

