
このリリースは PostgreSQL 7.1 (2001/04/13リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
PostgreSQL 7.0 から 7.1 への変更点
注意: ここにあげた変更点は,すべてを網羅していない可能性があります.詳しくはソースに付属の HISTORY というファイルを見てください。
互換性のない変更点
-
- データベースのフォーマットが変わったので、7.0.x で作成したデータベースは使えません。pg_dump か copy コマンドを使ってデータベースを再ロードする必要があります。
- フロントエンド/バックエンドの通信プロトコルについては、7.0と7.1 は同じなので通信は可能です。
- configureをsrcの下ではなく,トップレベルのディレクトリで行うようになりました。
- regression testはトップレベルのディレクトリで make check で行うようになりました。
- テーブルや,インデックスは同じ名前のファイルではなく,数字のファイルで表されるようになりました.数字の名前とテーブル名の間の関係は,pg_classのreflfilenode を見るか,contribに追加された,oid2nameというツールを使います。
- SELECT/UPDATE/DELETEに”ONLY”というキーワードが追加されました.従来,SELECTなどでは,
SELECT * FROM t1*;
のように,テーブル名の後ろに”*”を付けることにより,t1を継承するテーブルについても検索対象にすることができました.7.1では,
SELELCT * FROM ONLY t1;
のように,”ONLY”を付けない限りデフォルトでt1を継承するテーブルについても検索対象になります。この変更の理由ですが,SQL99 の仕様に合わせたためです。
追加された機能
-
- WAL(Write-Ahead Logging)が追加されました。通常「トランザクションログ」と呼ばれている機能です.WALの導入により,同期モード(fsyncありの状態)の性能が従来に比べて大幅に向上しました。
- OUTER JOIN(外部結合)が実装され,SQL92のOUTER JOINの構文が使えるようになりました.ただし,UNION JOINだけは実装されていません。
- TOAST(The Oversized-Attribute Storage Technique)が実装され,1レコード8kバイトの制限が撤廃されました.1レコードの1列あたり最大1GB までのデータを扱えます.また,圧縮してデータが小さくなる場合は,自動的にデータが圧縮して格納されます.これは完全に自動的に行われ,ユーザは意識する必要はまったくありません。
- Unicode対応が強化されました.たとえば,データベースがUnicode(UTF-8),フロントエンドがEUC_JPの場合,UTF-8 <–> EUC_JP のコード変換を自動的に行う機能が追加されました.UTF-8との自動変換が可能なエンコーディングは,以下です。
- EUC_JP
- EUC_CN
- EUC_KR
- EUC_TW
- ISO 8859-1から5まで
- SJIS
- BIG5
この機能を使うためには,configure時に –enable-unicode-conversion オプションが必要です。
- ファンクションマネージャの仕様が大幅に変り,NULL引数のチェックができるようになりました。
- viewにおける各種制限が撤廃されました.具体的には,GROUP BY, 集約関数,DISTINCT,LIMITが使えるようになりました。
- subselectにおける各種制限が撤廃されました.具体的には,
- subselect が FROM 句で使えるようになりました。
- ORDER BY, LIMIT が使えるようになりました。
- UNION/INTERSECT/EXCEPTが,ALL, subquery view,DISTINCT, ORDER BY, SELECT…INTO とともに使えるようになりました。
- 複数のSERIAL型の列がテーブル定義の中で使えるようになりました。
- 継承先のテーブルの継承列で主キー,外部キーが定義できるようになりました。
- GUC(Grand Unfied Configuration scheme)が導入されました.GUCとは,$PGDATA/postgresql.confに設定ファイルを集中させる方式のことです。
- SET SESSION CHARACTERISTICSというSQL文が追加されました。
- VARIANCEとSTDDEVという新しい集約関数が追加されました。
- 一時テーブルの作成で,”TEMP”に加え,”TEMPORARY”も使えるようになりました。
- “Add WITHOUT TIME ZONE type qualifier”のSQL文が追加されました。
- table constraintの追加がALTER TABLEでできるようになりました(以前は参照整合性関係のconstraintのみ追加できました)。
- pgaccessのテーブルブラウザでkinput2を使って日本語が入力できるようになりました。
- インデックスがALTER TABLE RENAMEでrenameできるようになりました。
- crypt authenticationにおいて,secondary password fileが利用できるようになりました.すなわち,pg_hba.confに,
$ cat pg_hba.conf host test 192.168.93.0 255.255.255.0 crypt passwd $ cat passwd foo:: bar::
と書いておくと,testデータベースには,データベースの登録ユーザの中の foo またはbarだけが接続できるようになります。
- 大文字/小文字の違いを無視するILIKEという述語が追加されました。
- LIKE/ILIKEにおいて,ESCAPEキーワードが使えるようになりました。
- function indexにSQL関数が使えるようになりました。
- pg_configコマンドが追加されました.これは,コンパイル時のオプションなどを表示するものです。
$ pg_config --configure --prefix=/usr/local/pgsql --enable-multibyte=EUC_JP --enable-unicode-conversion --with-tcl --with-perl --enable-syslog --enable-debug --with-CXX --with-java
- PL/pgSQLに,EXECUTE,GET DIAGNOTISTICS,quote_identifiers(),quote_literal()が追加されました。
- ALTER TABLE table OWNER TO user でテーブル所有者の変更ができるようになりました。
- pg_dumpallに –global-only というオプションが追加されました。
- CHECKPOINTというSQL文が追加されました。
性能向上、改良
- WAL(Write-Ahead Logging)が追加されました。通常「トランザクションログ」と呼ばれている機能です.WALの導入により,同期モード(fsyncありの状態)の性能が従来に比べて大幅に向上しました。
-
修正されたバグ(主なもの)
- 環境変数 PGCLIENTENCODIONG がpsqlなどのフロントエンドで認識されないバグを修正しました。
- EUC_TW, Big5のサポートに関するバグを修正しました。
- 不正な文字コードが含まれるデータベースのdump/restoreでエラーが起きる問題に対応しました。
- 長すぎるテーブル名,シーケンス名,カラム名が31バイトに縮められるときにマルチバイト文字を考慮していないバグを修正しました。
- マルチバイト文字として正しくないデータ(octal入力などで発生)をcopy from stdinが途中で止まってしまうなどのバグを修正しました。
- 多数のDBを管理している際に発生するバグを修正しました。
- インデックスにデータを挿入する際に,バックエンドが落ちることがあるバグを修正しました。
- crypt authenticationを使う際に発生するメモリーリークを修正しました。
- numeric計算のバグを修正しました。
- viewに対してLOCK,INSERT/UPDATE/DELETE,DROP RULE, CREATE INDEX, TRUNCATE をするとエラーになるようになりました。
- 一時テーブルのRENAMEができるようになりました。
- テーブルのRENAMEが安全にできるようになりました。
-
ドキュメント上の変更点
- README.mbは廃止,multibyte.html ドキュメントに含まれるようになりました。
- ドキュメントにFAQ_Japaneseが追加されました。