リリース 6.5

This release marks a major step in the development team's mastery of the source code we inherited from Berkeley. You will see we are now easily adding major features, thanks to the increasing size and experience of our world-wide development team.

このリリースは、開発チームがバークレイ由来のソースコードに精通し た重要な段階を示すものです。世界中の開発チームの人数と経験の増大 のおかげでより簡単に大きな機能を追加できるようになったことが判る でしょう。

Here is a brief summary of the more notable changes:

より注目すべき変更について簡単に要約を示します。

マルチバージョン・コンカレンシー・コントロール(MVCC)

This removes our old table-level locking, and replaces it with a locking system that is superior to most commercial database systems. In a traditional system, each row that is modified is locked until committed, preventing reads by other users. MVCC uses the natural multi-version nature of PostgreSQL to allow readers to continue reading consistent data during writer activity. Writers continue to use the compact pg_log transaction system. This is all performed without having to allocate a lock for every row like traditional database systems. So, basically, we no longer are restricted by simple table-level locking; we have something better than row-level locking.

これは古いテーブルレベルのロックを取り除きました。そして、 ロックシステムでこれに置き換えることで、ほとんどの商用デー タベースシステムよりも秀でたものとなりました。 伝統的なシステムでは、変更される各行をコミットされるまでロ ックすることで、他のユーザからの読みとりを防ぎます。 書き込み操作中に一貫性をもったデータを読み続けることができ るように、MVCC は PostgreSQL が標準で持つマルチバージョン機能 を使用します。 書き込みは小型の pg_log トランザクションシステムを使い続け ます。 これは、伝統的なデータベースシステムで行なわれるような各行の ロック割り当てを全く使用せずに実行されます。 ですので、基本的に単純なテーブルレベルロックによる制限はもは やなく、また、行レベルのロックよりも優れたものになっています。

pg_dumpを使ったホットバックアップ

pg_dump takes advantage of the new MVCC features to give a consistant database dump/backup while the database stays online and available for queries.

pg_dump は、データベースがオンラ イン状態で問い合わせに利用できる状態であっても一貫性をもつ データベースのダンプ / バックアップができるように、この新しい MVCC 機能を利用しています。

数値データ型

We now have a true numeric data type, with user-specified precision.

ユーザ指定の精度をもった、真の数値データ型を持つようにな りました。

中間テーブル

Temporary tables are guaranteed to have unique names within a database session, and are destroyed on session exit.

中間テーブルはあるデータベースセッション内で一意な名前を持つ こと、及び、そのセッションの終了時に削除されることが保証され ています。

新しい SQL 機能

We now have CASE, INTERSECT, and EXCEPT statement support. We have new LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL, SELECT ... FOR UPDATE, and an improved LOCK TABLE command.

CASE、INTERSECT、EXCEPT 文のサポートを行ないました。 新しく LIMIT/OFFSET、SET TRANSACTION ISOLATION LEVEL、 SELECT ... FOR UPDATE 文のサポートを行ない、そして、 LOCK TABLE コマンドの改良も行ないました。

速度向上

We continue to speed up PostgreSQL, thanks to the variety of talents within our team. We have sped up memory allocation, optimization, table joins, and row transfer routines.

開発チーム内の多くの人材のおかげで、PostgreSQL の速度向上が続 けられています。メモリ割り当て、最適化、テーブルの結合、行の転 送処理についての速度向上を行ないました。

移植

We continue to expand our port list, this time including WinNT/ix86 and NetBSD/arm32.

移植リストの拡張を続けています。今回は WinNT/ix86 及び NetBSD/arm32 を含めました。

インタフェース

Most interfaces have new versions, and existing functionality has been improved.

ほとんどのインタフェースはバージョンアップされ、また、既存の 機能は改良されました。

文書

New and updated material is present throughout the documentation. New FAQs have been contributed for SGI and AIX platforms. The Tutorial has introductory information on SQL from Stefan Simkovics. For the User's Guide, there are reference pages covering the postmaster and more utility programs, and a new appendix contains details on date/time behavior. The Administrator's Guide has a new chapter on troubleshooting from Tom Lane. And the Programmer's Guide has a description of query processing, also from Stefan, and details on obtaining the Postgres source tree via anonymous CVS and CVSup.

新規、また、更新された文書があります。 SGI 及び AIX プラットホームに関する新しい FAQs が寄稿されました。 チュートリアル には Stefan Simkovics 氏による SQL の入門情報があります。 ユーザガイド には、postmaster と多く のユーティリティプログラムまでをカバーするリファレンスページ や、日付/時刻の動作の詳細を含む新しい付録があります。 アドミニストレータガイド には、Tom Lane 氏によるトラブルシュートに関する新しい章があります。 そして、プログラマガイド には、Stefan 氏による問い合わせ処理の説明や、アノニマス CVS または CVSup による Postgres のソースコードの入手方法に ついての詳細情報があります。

バージョン 6.5 への移行

A dump/restore using pg_dump is required for those wishing to migrate data from any previous release of Postgres. pg_upgrade can not be used to upgrade to this release because the on-disk structure of the tables has changed compared to previous releases.

全ての Postgres の以前のリリースから データを移行する際には、pg_dump を使 用したダンプ/リストアが必要です。 ディスク上のテーブル構成が以前のリリースと比べて変更されています ので、このリリースへのアップグレードの際に pg_upgrade を使用することは できません

The new Multi-Version Concurrency Control (MVCC) features can give somewhat different behaviors in multi-user environments. Read and understand the following section to ensure that your existing applications will give you the behavior you need.

新しいマルチバージョン・コンカレンシー・コントロール (MVCC) 機能 は複数ユーザ環境において、どこか異なった動作を引き起こす可能性が あります。 既存のアプリケーションが所望の動作を行なうことを確実に するために、次の節を熟読して下さい。

マルチバージョン・コンカレンシー・コントロール

Because readers in 6.5 don't lock data, regardless of transaction isolation level, data read by one transaction can be overwritten by another. In other words, if a row is returned by SELECT it doesn't mean that this row really exists at the time it is returned (i.e. sometime after the statement or transaction began) nor that the row is protected from being deleted or updated by concurrent transactions before the current transaction does a commit or rollback.

6.5 では読み込み時にデータをロックしませんので、トランザクショ ンの隔離レベルに関係なく、あるトランザクションによって読みとら れるデータは、他のトランザクションによって上書きされることがで きます。 言い替えると、SELECT によって返される行は、 その返された時刻(その行もしくはトランザクションの開始後の時点) において実際に存在している行であること、その行が現在のトランザ クションがコミットまたはロールバックするまで同時トランザクショ ンによる削除や更新から保護されていることを意味していません。

To ensure the actual existence of a row and protect it against concurrent updates one must use SELECT FOR UPDATE or an appropriate LOCK TABLE statement. This should be taken into account when porting applications from previous releases of Postgres and other environments.

実際に存在する行を確実にする、または、同時更新から保護するた めには、SELECT FOR UPDATE もしくは、適切な LOCK TABLE 文を使用しなければなりません。 Postgresの以前のリリース、または、 他の環境からアプリケーションを移植する場合、これを考慮しなけ ればなりません。

Keep the above in mind if you are using contrib/refint.* triggers for referential integrity. Additional technics are required now. One way is to use LOCK parent_table IN SHARE ROW EXCLUSIVE MODE command if a transaction is going to update/delete a primary key and use LOCK parent_table IN SHARE MODE command if a transaction is going to update/insert a foreign key.

参照完全性用の contrib/refint.* トリガを 使用する場合は上の点を覚えておいて下さい。 ここでは更に技術が必要とされます。 1 つの方法は、トランザクションがプライマリキーを更新/削除する場合、 LOCK parent_table IN SHARE ROW EXCLUSIVE MODE コマンドを使用し、トランザクションが外部キーを更新/挿入する場合 LOCK parent_table IN SHARE MODE コマンドを使用することです。

Note: Note that if you run a transaction in SERIALIZABLE mode then you must execute the LOCK commands above before execution of any DML statement (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) in the transaction.

SERIALIZABLE モードでトランザクションを実行する場合には、その トランザクションで DML 文 (SELECT/INSERT/DELETE/ UPDATE/FETCH/COPY_TO) を使用する前に上述の LOCK コマンドを実行しなければならないことに 注意して下さい。

These inconveniences will disappear in the future when the ability to read dirty (uncommitted) data (regardless of isolation level) and true referential integrity will be implemented.

これらの面倒な点は将来、(隔離レベルに関係しない)ダーティ(コ ミットされてない)データの読み込み機能、真の参照完全性が実装さ れた時点で解消されます。

詳細な変更点一覧

Bug Fixes
---------
Fix text<->float8 and text<->float4 conversion functions(Thomas)
Fix for creating tables with mixed-case constraints(Billy)
Change exp()/pow() behavior to generate error on underflow/overflow(Jan)
Fix bug in pg_dump -z
Memory overrun cleanups(Tatsuo)
Fix for lo_import crash(Tatsuo)
Adjust handling of data type names to suppress double quotes(Thomas)
Use type coersion for matching columns and DEFAULT(Thomas)
Fix deadlock so it only checks once after one second of sleep(Bruce)
Fixes for aggregates and PL/pgsql(Hiroshi)
Fix for subquery crash(Vadim)
Fix for libpq function PQfnumber and case-insensitive names(Bahman Rafatjoo)
Fix for large object write-in-middle, no extra block, memory consumption(Tatsuo)
Fix for pg_dump -d or -D and  quote special characters in INSERT
Repair serious problems with dynahash(Tom)
Fix INET/CIDR portability problems
Fix problem with selectivity error in ALTER TABLE ADD COLUMN(Bruce)
Fix executor so mergejoin of different column types works(Tom)
Fix for Alpha OR selectivity bug
Fix OR index selectivity problem(Bruce)
Fix so \d shows proper length for char()/varchar()(Ryan)
Fix tutorial code(Clark)
Improve destroyuser checking(Oliver)
Fix for Kerberos(Rodney McDuff)
Fix for dropping database while dirty buffers(Bruce)
Fix so sequence nextval() can be case-sensitive(Bruce)
Fix !!= operator
Drop buffers before destroying database files(Bruce)
Fix case where executor evaluates functions twice(Tatsuo)
Allow sequence nextval actions to be case-sensitive(Bruce)
Fix optimizer indexing not working for negative numbers(Bruce)
Fix for memory leak in executor with fjIsNull
Fix for aggregate memory leaks(Erik Riedel)
Allow username containing a dash GRANT permissions
Cleanup of NULL in inet types
Clean up system table bugs(Tom)
Fix problems of PAGER and \? command(Masaaki Sakaida)
Reduce default multi-segment file size limit to 1GB(Peter)
Fix for dumping of CREATE OPERATOR(Tom)
Fix for backward scanning of cursors(Hiroshi Inoue)
Fix for COPY FROM STDIN when using \i(Tom)
Fix for subselect is compared inside an expression(Jan)
Fix handling of error reporting while returning rows(Tom)
Fix problems with reference to array types(Tom,Jan)
Prevent UPDATE SET oid(Jan)
Fix pg_dump so -t option can handle case-sensitive tablenames
Fixes for GROUP BY in special cases(Tom, Jan)
Fix for memory leak in failed queries(Tom)
DEFAULT now supports mixed-case identifiers(Tom)
Fix for multi-segment uses of DROP/RENAME table, indexes(Ole Gjerde)
Disable use of pg_dump with both -o and -d options(Bruce)
Allow pg_dump to properly dump GROUP permissions(Bruce)
Fix GROUP BY in INSERT INTO table SELECT * FROM table2(Jan)
Fix for computations in views(Jan)
Fix for aggregates on array indexes(Tom)
Fix for DEFAULT handles single quotes in value requiring too many quotes
Fix security problem with non-super users importing/exporting large objects(Tom)
Rollback of transaction that creates table cleaned up properly(Tom)
Fix to allow long table and column names to generate proper serial names(Tom)

Enhancements
------------
Add "vacuumdb" utility
Speed up libpq by allocating memory better(Tom)
EXPLAIN all indices used(Tom)
Implement CASE, COALESCE, NULLIF  expression(Thomas)
New pg_dump table output format(Constantin)
Add string min()/max() functions(Thomas)
Extend new type coersion techniques to aggregates(Thomas)
New moddatetime contrib(Terry)
Update to pgaccess 0.96(Constantin)
Add routines for single-byte "char" type(Thomas)
Improved substr() function(Thomas)
Improved multi-byte handling(Tatsuo)
Multi-version concurrency control/MVCC(Vadim)
New Serialized mode(Vadim)
Fix for tables over 2gigs(Peter)
New SET TRANSACTION ISOLATION LEVEL(Vadim)
New LOCK TABLE IN ... MODE(Vadim)
Update ODBC driver(Byron)
New NUMERIC data type(Jan)
New SELECT FOR UPDATE(Vadim)
Handle "NaN" and "Infinity" for input values(Jan)
Improved date/year handling(Thomas)
Improved handling of backend connections(Magnus)
New options ELOG_TIMESTAMPS and USE_SYSLOG options for log files(Massimo)
New TCL_ARRAYS option(Massimo)
New INTERSECT and EXCEPT(Stefan)
New pg_index.indisprimary for primary key tracking(D'Arcy)
New pg_dump option to allow dropping of tables before creation(Brook)
Speedup of row output routines(Tom)
New READ COMMITTED isolation level(Vadim)
New TEMP tables/indexes(Bruce)
Prevent sorting if result is already sorted(Jan)
New memory allocation optimization(Jan)
Allow psql to do \p\g(Bruce)
Allow multiple rule actions(Jan)
Added LIMIT/OFFSET functionality(Jan)
Improve optimizer when joining a large number of tables(Bruce)
New intro to SQL from S. Simkovics' Master's Thesis (Stefan, Thomas)
New intro to backend processing from S. Simkovics' Master's Thesis (Stefan)
Improved int8 support(Ryan Bradetich, Thomas, Tom)
New routines to convert between int8 and text/varchar types(Thomas)
New bushy plans, where meta-tables are joined(Bruce)
Enable right-hand queries by default(Bruce)
Allow reliable maximum number of backends to be set at configure time
      (--with-maxbackends and postmaster switch (-N backends))(Tom)
GEQO default now 10 tables because of optimizer speedups(Tom)
Allow NULL=Var for MS-SQL portability(Michael, Bruce)
Modify contrib check_primary_key() so either "automatic" or "dependent"(Anand)
Allow psql \d on a view show query(Ryan)
Speedup for LIKE(Bruce)
Ecpg fixes/features, see src/interfaces/ecpg/ChangeLog file(Michael)
JDBC fixes/features, see src/interfaces/jdbc/CHANGELOG(Peter)
Make % operator have precedence like /(Bruce)
Add new postgres -O option to allow system table structure changes(Bruce)
Update contrib/pginterface/findoidjoins script(Tom)
Major speedup in vacuum of deleted rows with indexes(Vadim) 
Allow non-SQL functions to run different versions based on arguments(Tom)
Add -E option that shows actual queries sent by \dt and friends(Masaaki Sakaida)
Add version number in startup banners for psql(Masaaki Sakaida)
New contrib/vacuumlo removes large objects not referenced(Peter)
New initialization for table sizes so non-vacuumed tables perform better(Tom)
Improve error messages when a connection is rejected(Tom)
Support for arrays of char() and varchar() fields(Massimo)
Overhaul of hash code to increase reliability and performance(Tom)
Update to PyGreSQL 2.4(D'Arcy)
Changed debug options so -d4 and -d5 produce different node displays(Jan)
New pg_options: pretty_plan, pretty_parse, pretty_rewritten(Jan)
Better optimization statistics for system table access(Tom)
Better handling of non-default block sizes(Massimo)
Improve GEQO optimizer memory consumption(Tom)
UNION now suppports ORDER BY of columns not in target list(Jan)
Major libpq++ improvements(Vince Vielhaber)
pg_dump now uses -z(ACL's) as default(Bruce)
backend cache, memory speedups(Tom)
have pg_dump do everything in one snapshot transaction(Vadim)
fix for large object memory leakage, fix for pg_dumping(Tom)
INET type now respects netmask for comparisons
Make VACUUM ANALYZE only use a readlock(Vadim)
Allow VIEWs on UNIONS(Jan)
pg_dump now can generate consistent snapshots on active databases(Vadim)

Source Tree Changes
-------------------
Improve port matching(Tom)
Portability fixes for SunOS
Add NT/Win32 backend port and enable dynamic loading(Magnus and Daniel Horak)
New port to Cobalt Qube(Mips) running Linux(Tatsuo)
Port to NetBSD/m68k(Mr. Mutsuki Nakajima)
Port to NetBSD/sun3(Mr. Mutsuki Nakajima)
Port to NetBSD/macppc(Toshimi Aoki)
Fix for tcl/tk configuration(Vince)
Removed CURRENT keyword for rule queries(Jan)
NT dynamic loading now works(Daniel Horak)
Add ARM32 support(Andrew McMurry)
Better support for HPUX 11 and Unixware
Improve file handling to be more uniform, prevent file descriptor leak(Tom)
New install commands for plpgsql(Jan)