A.18. リリース6.3

リリース日: 1998-03-01

このリリースには多くの新しい機能と改良が行われています。 不完全ですが簡潔に要約を示します。

Note: Bruce Momjian氏により新しいリリースを紹介する下記のメモが記述されました。

一般的な6.3で触れておくべき点が数点あります。 一文では記述できない大きな項目のみを記します。 より詳細な変更点の一覧を必ず読み直して下さい。

1点目は、副SELECTを持つようになった点です。副SELECTがなければ、 SQLはかなり限定された言語であるということを言わざるを得ません。 副SELECTは重要な機能ですので、現在のコードを再調査し、副SELECTが より良い問い合わせであるかを確認して下さい。副SELECTを使用した方が良い と考えるところが多くあることがお分かり頂けると思います。 Vadim氏の完全な副SELECTによって、PostgreSQLでのSQL機能が大幅に向上されました。 現時点で考慮しなければならないことは、副SELECTを対象リストには 使用できないと言う点のみです。

2点目は、6.3ではデフォルトでTCP/IPではなくunixドメインの ソケットが使用される点です。他のマシンからの接続を行なうためには、 postmasterの新しいオプション -i を使用し、pg_hba.confを編集する 必要があります。また、このためにpg_hba.confのフォーマットが変更されました。

3 番目は、char()のフィールドはvarchar()やtextよりも高速にアクセス できるようになった点です。特に、textとvarchar()はこの型の最初の列の 後の列へのアクセスにはペナルティを持っています。char()もまた、 このアクセスペナルティを持っていましたが、これは廃止されました。 いくつかのテーブル、特に、varchar()もしくはtextとして定義した 短い文字からなるカラムがあるテーブルの再設計を行なう方が良いかも しれません。これと他の変更によって、6.3 は前のリリースに比べて 一層高速になりました。

Unixファイルに全く依存しないパスワードの定義ができるようになりました。 新しいSQL USERコマンドがあります。より詳細な情報については 管理者用ガイド(Administrator's Guide)を 参照して下さい。ユーザの情報とパスワードを保存するpg_shadowという 新しいテーブルがあり、デフォルトで、SELECTを実行できるのは postgresのスーパーユーザのみです。pg_userはpg_shadowのビューになり、 PUBLICでSELECTを実行できます。アプリケーションを変更することなく pg_userを使用し続けるべきです。

ANSI標準で要求されているため、ユーザが作成したテーブルは、 デフォルトでPUBLICはSELECT権限を持たなくなりました。 もちろん、テーブルを作成した後に必要な権限を与える(GRANT)ことができます。 システムテーブルは今まで通り、PUBLICからSELECTを実行できます。

また、実際のデッドロックを検出するコードを持つようになりました。 60秒のタイムアウトは排除されました。新しいロック用コードは FIFOバッファを実装しましたので、高負荷状態でのリソース不足が より少なくなりました。

これまでのリリースでは、不十分なドキュメントについて 多くの不満の声がありました。Thomas氏は、このリリースで 多くの新規マニュアルを作成しました。doc/ ディレクトリを見て下さい。

性能を向上させるために、time travelを削除しましたが、トリガを 使って実装することができます。(pgsql/contrib/spi/README を参照して下さい。) 新しい \d コマンドを使用して、型、演算子などを見てみて下さい。 また、ビューは、その元になったテーブルに関係なく、独自の権限を 持つようになりました。したがって、権限の設定は別途行う必要があります。 Postgresと通信するいくつかの新しい方法については /pgsql/interfacesを参照して下さい。

これは既存のユーザへの説明を本当に必要とする最初のリリースです。 新しいリリースでは多くの制限が取り除かれ、ユーザが使用してきた 回避方法が不要になったためです。

A.18.1. 6.3への移行

全てのPostgresの以前のリリースから データを移行する際には、pg_dump、 またはpg_dumpallを使用してダンプ/リストア を行う必要があります。

A.18.2. 詳細な変更点一覧

Bug Fixes
---------
Fix binary cursors broken by MOVE implementation(Vadim)
Fix for tcl library crash(Jan)
Fix for array handling, from Gerhard Hintermayer
Fix acl error, and remove duplicate pqtrace(Bruce)
Fix psql \e for empty file(Bruce)
Fix for textcat on varchar() fields(Bruce)
Fix for DBT Sendproc (Zeugswetter Andres)
Fix vacuum analyze syntax problem(Bruce)
Fix for international identifiers(Tatsuo)
Fix aggregates on inherited tables(Bruce)
Fix substr() for out-of-bounds data
Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2)(Bruce)
Fix notty output to show status result.  -q option still turns it off(Bruce)
Fix for count(*), aggs with views and multiple tables and sum(3)(Bruce)
Fix cluster(Bruce)
Fix for PQtrace start/stop several times(Bruce)
Fix a variety of locking problems like newer lock waiters getting
	lock before older waiters, and having readlock people not share
	locks if a writer is waiting for a lock, and waiting writers not
	getting priority over waiting readers(Bruce)
Fix crashes in psql when executing queries from external files(James)
Fix problem with multiple order by columns, with the first one having
	NULL values(Jeroen)
Use correct hash table support functions for float8 and int4(Thomas)
Re-enable JOIN= option in CREATE OPERATOR statement (Thomas)
Change precedence for boolean operators to match expected behavior(Thomas)
Generate elog(ERROR) on over-large integer(Bruce)
Allow multiple-argument functions in constraint clauses(Thomas)
Check boolean input literals for 'true','false','yes','no','1','0'
	and throw elog(ERROR) if unrecognized(Thomas)
Major large objects fix
Fix for GROUP BY showing duplicates(Vadim)
Fix for index scans in MergeJion(Vadim)

Enhancements
------------
Subselects with EXISTS, IN, ALL, ANY keywords (Vadim, Bruce, Thomas)
New User Manual(Thomas, others)
Speedup by inlining some frequently-called functions
Real deadlock detection, no more timeouts(Bruce)
Add SQL92 "constants" CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, 
	CURRENT_USER(Thomas)
Modify constraint syntax to be SQL92-compliant(Thomas)
Implement SQL92 PRIMARY KEY and UNIQUE clauses using indices(Thomas)
Recognize SQL92 syntax for FOREIGN KEY. Throw elog notice(Thomas)
Allow NOT NULL UNIQUE constraint clause (each allowed separately before)(Thomas)
Allow Postgres-style casting ("::") of non-constants(Thomas)
Add support for SQL3 TRUE and FALSE boolean constants(Thomas)
Support SQL92 syntax for IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE(Thomas)
Allow shorter strings for boolean literals (e.g. "t", "tr", "tru")(Thomas)
Allow SQL92 delimited identifiers(Thomas)
Implement SQL92 binary and hexadecimal string decoding (b'10' and x'1F')(Thomas)
Support SQL92 syntax for type coercion of literal strings
	(e.g. "DATETIME 'now'")(Thomas)
Add conversions for int2, int4, and OID types to and from text(Thomas)
Use shared lock when building indices(Vadim)
Free memory allocated for an user query inside transaction block after
	this query is done, was turned off in <= 6.2.1(Vadim)
New SQL statement CREATE PROCEDURAL LANGUAGE(Jan)
New Postgres Procedural Language (PL) backend interface(Jan)
Rename pg_dump -H option to -h(Bruce)
Add Java support for passwords, European dates(Peter)
Use indices for LIKE and ~, !~ operations(Bruce)
Add hash functions for datetime and timespan(Thomas)
Time Travel removed(Vadim, Bruce)
Add paging for \d and \z, and fix \i(Bruce)
Add Unix domain socket support to backend and to frontend library(Goran)
Implement CREATE DATABASE/WITH LOCATION and initlocation utility(Thomas)
Allow more SQL92 and/or Postgres reserved words as column identifiers(Thomas)
Augment support for SQL92 SET TIME ZONE...(Thomas)
SET/SHOW/RESET TIME ZONE uses TZ backend environment variable(Thomas)
Implement SET keyword = DEFAULT and SET TIME ZONE DEFAULT(Thomas)
Enable SET TIME ZONE using TZ environment variable(Thomas)
Add PGDATESTYLE environment variable to frontend and backend initialization(Thomas)
Add PGTZ, PGCOSTHEAP, PGCOSTINDEX, PGRPLANS, PGGEQO
	frontend library initialization environment variables(Thomas)
Regression tests time zone automatically set with "setenv PGTZ PST8PDT"(Thomas)
Add pg_description table for info on tables, columns, operators, types, and
	aggregates(Bruce)
Increase 16 char limit on system table/index names to 32 characters(Bruce)
Rename system indices(Bruce)
Add 'GERMAN' option to SET DATESTYLE(Thomas)
Define an "ISO-style" timespan output format with "hh:mm:ss" fields(Thomas)
Allow fractional values for delta times (e.g. '2.5 days')(Thomas)
Validate numeric input more carefully for delta times(Thomas)
Implement day of year as possible input to date_part()(Thomas)
Define timespan_finite() and text_timespan() functions(Thomas)
Remove archive stuff(Bruce)
Allow for a pg_password authentication database that is separate from
	the system password file(Todd)
Dump ACLs, GRANT, REVOKE permissions(Matt)
Define text, varchar, and bpchar string length functions(Thomas)
Fix Query handling for inheritance, and cost computations(Bruce)
Implement CREATE TABLE/AS SELECT (alternative to SELECT/INTO)(Thomas)
Allow NOT, IS NULL, IS NOT NULL in constraints(Thomas)
Implement UNIONs for SELECT(Bruce)
Add UNION, GROUP, DISTINCT to INSERT(Bruce)
varchar() stores only necessary bytes on disk(Bruce)
Fix for BLOBs(Peter)
Mega-Patch for JDBC...see README_6.3 for list of changes(Peter)
Remove unused "option" from PQconnectdb()
New LOCK command and lock manual page describing deadlocks(Bruce)
Add new psql \da, \dd, \df, \do, \dS, and \dT commands(Bruce)
Enhance psql \z to show sequences(Bruce)
Show NOT NULL and DEFAULT in psql \d table(Bruce)
New psql .psqlrc file start-up(Andrew)
Modify sample start-up script in contrib/linux to show syslog(Thomas)
New types for IP and MAC addresses in contrib/ip_and_mac(TomH)
Unix system time conversions with date/time types in contrib/unixdate(Thomas)
Update of contrib stuff(Massimo)
Add Unix socket support to DBD::Pg(Goran)
New python interface (PyGreSQL 2.0)(D'Arcy)
New frontend/backend protocol has a version number, network byte order(Phil)
Security features in pg_hba.conf enhanced and documented, many cleanups(Phil)
CHAR() now faster access than VARCHAR() or TEXT
ecpg embedded SQL preprocessor
Reduce system column overhead(Vadmin)
Remove pg_time table(Vadim)
Add pg_type attribute to identify types that need length (bpchar, varchar)
Add report of offending line when COPY command fails
Allow VIEW permissions to be set separately from the underlying tables. 
	For security, use GRANT/REVOKE on views as appropriate(Jan)
Tables now have no default GRANT SELECT TO PUBLIC.  You must
	explicitly grant such permissions.
Clean up tutorial examples(Darren)

Source Tree Changes
-------------------
Add new html development tools, and flow chart in /tools/backend
Fix for SCO compiles
Stratus computer port Robert Gillies
Added support for shlib for BSD44_derived & i386_solaris
Make configure more automated(Brook)
Add script to check regression test results
Break parser functions into smaller files, group together(Bruce)
Rename heap_create to heap_create_and_catalog, rename heap_creatr
	to heap_create()(Bruce)
Sparc/Linux patch for locking(TomS)
Remove PORTNAME and reorganize port-specific stuff(Marc)
Add optimizer README file(Bruce)
Remove some recursion in optimizer and clean up some code there(Bruce)
Fix for NetBSD locking(Henry)
Fix for libptcl make(Tatsuo)
AIX patch(Darren)
Change IS TRUE, IS FALSE, ... to expressions using "=" rather than
	function calls to istrue() or isfalse() to allow optimization(Thomas)
Various fixes NetBSD/Sparc related(TomH)
Alpha linux locking(Travis,Ryan)
Change elog(WARN) to elog(ERROR)(Bruce)
FAQ for FreeBSD(Marc)
Bring in the PostODBC source tree as part of our standard distribution(Marc)
A minor patch for HP/UX 10 vs 9(Stan)
New pg_attribute.atttypmod for type-specific info like varchar length(Bruce)
Unixware patches(Billy)
New i386 'lock' for spin lock asm(Billy)
Support for multiplexed backends is removed
Start an OpenBSD port
Start an AUX port
Start a Cygnus port
Add string functions to regression suite(Thomas)
Expand a few function names formerly truncated to 16 characters(Thomas)
Remove un-needed malloc() calls and replace with palloc()(Bruce)