このリリースは 9.0.4 からの修正リリース(2011/09/26リリース)です。
9.0.x からのアップデートではダンプ、リストアは不要です。
また、9.0.4 より前のバージョンからアップデートを行う場合は 9.0.4 に関する技術情報を参照してください。
このリリースは 9.0.4 からの修正リリース(2011/09/26リリース)です。
9.0.x からのアップデートではダンプ、リストアは不要です。
また、9.0.4 より前のバージョンからアップデートを行う場合は 9.0.4 に関する技術情報を参照してください。
このリリースは 9.4.8 からの修正リリース(2011/09/26リリース)です。
8.4.x からのアップデートではダンプ、リストアは不要です。
また、8.4.8 より前のバージョンからアップデートを行う場合は 8.4.8 に関する技術情報を参照してください。
このリリースは 8.3.15 からの修正リリース(2011/09/26リリース)です。
8.3.x からのアップデートではダンプ、リストアは不要です。
また、8.3.8 より前のバージョンからアップデートを行う場合は 8.3.8 に関する技術情報を参照してください。
このリリースは 8.2.21 からの修正リリース(2011/09/26リリース)です。
8.2.x からのアップデートではダンプ、リストアは不要です。
また、8.2.14 より前のバージョンからアップデートを行う場合は 8.2.14 に関する技術情報を参照してください。
このページでは PostgreSQL 9.1 (2011/07/11リリース)に関する技術情報をお届けします(beta3の段階で作成しています)。
本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
このリリースのPostgreSQLでは、以下を含む多数の主要機能が追加されます。
上述の項目については、以下のセクションでより詳しく説明します。
全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ/リストア、または、pg_upgradeの使用が必要です。バージョン9.1には、以前のリリースとの互換性に影響を与える変更がいくつか含まれます。以下の非互換性に注意してください。
長い間存在した、SQL標準との非互換性がなくなります。escape_string_warningによって警告が出ていました。
文字列がエスケープを必要とする場合、E” 形式の文字列を使うのが適切です。また E” 形式の文字列には、この変更による影響はありません。
代わりに CAST コマンドや :: 演算子を使ってください。
例:
=# CREATE TYPE ct_test1 AS (id int, c1 text, t1 timestamp); =# CREATE TABLE test1 (id int primary key, v ct_test1); =# INSERT INTO test1 VALUES (1, (1, 'hello', now()));
=# SELECT text(v) FROM test; text ------------------------------------------ (1,hello,"2011-06-13 09:44:31.11951+09")
=# SELECT text(v) FROM test1; ERROR: function text(ct_test) does not exist HINT: No function matches the given name and argument types. You might need to add explicit type casts.
以下のように型に合わないデータはエラーになります。
=# CREATE DOMAIN numeric42 AS NUMERIC(4,2)[1]; =# SELECT '{146.8944}'::numeric42; ERROR: numeric field overflow
しかし、9.0 以前で以下のように関数を通したときチェックが働きませんでした。
=# CREATE FUNCTION mul_num(n numeric42) RETURNS numeric42 LANGUAGE plpgsql AS $$ DECLARE n2 numeric42; BEGIN n2[1] := n[1] * n[1]; RETURN n2; END; $$;
(9.0以前 – 桁数制限を越えて結果が出力されてしまう)
=# SELECT mul_num(ARRAY[12.12]) mul_num ------------ {146.8944} (1 row)
(9.1)
=# SELECT mul_num(ARRAY[12.12]); ERROR: numeric field overflow
以前は NULL を返していました。
現在トリガーは BEFORE、AFTER、INSTEAD OF action の3つのケースで駆動できます。トリガー関数の作者は、そのロジックが3つすべてのケースで正常に動作するか確認する必要があります。
以前の pg_last_xlog_receive_location() は、ストリーミングレプリケーションで wal receiver が再起動されると、戻ることがありました。
以前はレプリケーション接続は常に記録されていました。
以前は、RAISE を捕捉したブロック内で再度 RAISE を行った場合に、同スコープ内で捕捉ができず、Oracle の PL/SQL の振る舞いと異なっていました。
ソースの src/test/regress/sql/plpgsql.sql に動作例を示す raise_test()関数が含まれます。
以前は PL/pgSQL は関数ボディの始まりにある空行を無視していました(数えていなかった)。これは他の言語と矛盾していたので、この特別なケースは削除されました。
これまでは衝突を検知できず、OUT パラメータだけが参照されていました。
(9.1 でのエラー発生例)
=# CREATE FUNCTION inout_test(IN foo int, OUT foo int) LANGUAGE plpgsql AS $$ DECLARE foo int := 1; BEGIN foo := 2; END; $$; ERROR: parameter name "foo" used more than once CONTEXT: compilation of PL/pgSQL function "inout_test" near line 1
型修飾子とは、varchar(10) において長さ制限を示す 10 などの、データ型のパラメータのことです。これまで型修飾子は、割り当て時には機能していましたが、その他においては無視されていました。これらがよりテーブルカラム同様の振る舞いをするようになりました。本変更でほとんどの場合、目に見える変化はないと予想されますが、PL/pgSQL 関数から実行される SQLコマンド結果に微妙な変化をもたらす可能性があります。(Tom Lane)
これまでは、いくつかの pg_stat_database カウンタがリセットされていませんでした。
これにより通常テーブルよりも優れた更新性能をもつテーブルを実現できます。一方で、クラッシュに対して安全ではありません。サーバクラッシュ時には変更内容が消えてしまいます。また、レプリケーションサーバに変更が伝播しません。
従来は FULL OUTER JOIN には merge join しか実施できませんでした。また、LEFT OUTER JOIN と RIGHT OUTER JOIN は NULL を含むことのできる片側のみでハッシュが使えました。本変更により、実行プラン最適化の幅が広がります。
より少ないオーバーヘッドで commit_siblings を使うことができます。
これにより、テーブル継承に対し ORDER BY、LIMIT、あるいは MIN、MAX を使うときに、より良い実行プランの最適化ができるようになります。具体的には各子テーブルで top-N ソートを行い、その結果を Merge Append するという実行プランが選択できるようになりました。
継承テーブルへの問い合わせであっても、インデックスがあるとき、Aggregate でなく、Sort と Limit 1 の処理を選択できるようになります。
これまでは IPアドレスと CIDR値のみに対応していました。
これまでは 0.0.0.0/0 あるいは ::/0 と記述する必要がありました。
これにより Windowsサーバーで SSPI認証をするために、Unixベースの GSSAPIクライアントが利用可能になります。
これまでは、そのような行は無視されていました。本変更でサポートされない場合にふさわしい振る舞いとなります。
後方互換性のため、旧来の記述方法もまだ受け付けられます。
これは 9.1 開発版からの変更内容となります。
この変更は peer認証のコードをシンプルにし、性能を向上させます。これにより peer認証が働かなくなったプラットフォームは、これまで知られている限り、5.0 以前の NetBSD のみです。
WALファイルと同期動作についての詳細が記録されるようになります。
logging_collector設定によるメッセージログ出力についてファイルパーミッションを設定することができます。
データベース全体についての現在のトランザクションに限定した情報を返します。
バックエンドが各バッファに fsync を実行した回数をカウントします。
デフォルトでは shared_buffers 設定値に基づき自動チューニングが行われます。手動設定もできます。
より大きな値(〜21億ミリ秒)まで設定できます。
プライマリを、スタンバイでトランザクション情報をディスクに書くのを待ってからコミットを報告するようにさせるようにできます。プライマリの synchronous_standby_names 設定にしたがって、スタンバイが同期スタンバイであるかが指定されます。同期レプリケーションを有効とするか無効とするかは、トランザクション単位で synchronous_commit 設定により、指定できます。
これにより、スタンバイサーバを作る際に手動でファイルシステムバックアップを転送する必要がなくなります。
指定時間を越えてレプリケーション接続のアイドル状態が続く場合、自動で切断されます。これまでは TCPタイムアウトが経過するまで接続障害が検知できませんでした。これは多くの場合長くて不便でした。
スタンバイサーバの新設やベースバックアップ作成に利用できます。
ストリーミングレプリケーションのための参照権限が与えられ、これによりスーパーユーザ(管理者ユーザ)でなくてもレプリケーション接続を開始することができるようになります。
これまではスーパーユーザのみがレプリケーション接続を開始できました。なお、スーパーユーザはデフォルトで本権限を持ちます。
プライマリの本ビューから、接続している各スタンバイのレプリケーション状態を見ることができます。
直近にスタンバイに適用されたコミットまたはアボートのトランザクションログレコードがプライマリにおいて生成された時刻を返します。
スタンバイで本設定を有効にすることで、プライマリにおける古い行バージョンの整理を遅延できるようにします。本設定はスタンバイでの長時間クエリがキャンセルされることを防ぐのに役立ちます。
スタンバイサーバにて、データベースごとに原因ごとにキャンセルされたクエリ数がカウントされます。キャンセル理由は DROP TABLESPACE、ロックタイムアウト、スナップショットが古いこと、バッファの Pin(内部ロックの一種)、およびデッドロックのいずれかです。
プライマリサーバ内で単独に発生したキャンセルは含まれません。
データベースで発生したレプリケーションに伴う衝突の回数が示されます。
これまで最大 35min(分)でしたが、ずっと大きい値(〜21億ミリ秒)まで指定できるようになります。
新たに追加された関数は、リプレイを停止する pg_xlog_replay_pause()、再開するpg_xlog_replay_resume()、および状態を表示する pg_is_xlog_replay_paused() の3つです。
ターゲット時間(あるいは xid、リストアポイント名で指定)に達したとき、リカバリをポーズ状態にできます。希望するリカバリ時点を探すのに有用です。
ここで命名したものは recovery.conf の中の recovery_target_name 設定でターゲットとして指定することができます。
recovery_target_timeline = ‘latest’ であるとき、スタンバイサーバは新たなタイムラインがないか定期的にアーカイブディレクトリを調べます。
マスターサーバのタイムラインが変わっても、レプリケーションを継続できます。別スタンバイサーバが昇格して新たなプライマリサーバとなった場合に有用です。
off にすることで、バックエンドプロセスのひとつがクラッシュした際の自動的なサーバプロセス全体の再起動をさせないようにできます。これにより外部のクラスタ管理ソフトウェアが PostgreSQLを再起動するかどうか制御できるようになります。
これまでは recovery.conf では全ての値をクオート(’)で囲う必要がありました。
これまで、SEIALIZABLE は、ひとつの MVCC スナップショットがそのトランザクションの間ずっと使われることだけを保障しており、ある程度の文書化された例外事項がありました。
REPEATABLE READ トランザクション隔離レベルを指定した場合、従来の SEIALIZABLE の振る舞いをするようになります。
これらコマンドで RETURNING を使いデータを続く問い合わせに渡すことができます。
以下使用例ではテーブル tbl01 から tbl02 に grp_id = 1 の行を移動します。
WITH moving AS (DELETE FROM tbl01 WHERE grp_id = 1 RETURNING *) INSERT INTO tbl02 SELECT * FROM moving;
いくつかの他のデータベース製品ではこのような動作ができました。また、主キーが指定されているため、結果が不定となることはありません。
以下のような SQL が実行できるようになります。
=# SELECT * FROM test1 GROUP BY id; id | val ----+----- 2 | bb 1 | aa 3 | cc (3 rows)
これらの集合演算においては DISTINCT を指定したかのような動作をするのがデフォルトの振る舞いであるため、冗長な指定となりますが、SQL標準では記述することが許されています。
これまで、EXPLAIN ANALYZE の場合と RULE を伴うクエリの場合とで、微妙に異なるスナップショットを使用していました。EXPLAIN ANALYZE の場合の振る舞いがより論理的と判断されました。
これまでロケールを反映した文字列照合はデータベース単位にしか設定できませんでした。本拡張で、カラム単位に、ドメインに、インデックスに、また、ORDER BY 式に、SQL標準である COLLATE節を使って設定することができます。
以下のように同じテーブルに対して、都度異なるロケールを指定してソートしたりすることができます。なお、ロケール対応状況は OS に依存します。
=# CREATE COLLATION c_c (LOCALE = 'C'); =# CREATE COLLATION c_en (LOCALE = 'en_US.UTF-8'); =# SELECT v FROM test2 ORDER BY v COLLATE c_c; -- 文字コード順 v ----- ABC XYZ abc xyz (4 rows) =# SELECT v FROM test2 ORDER BY v COLLATE c_en; -- 英語辞書順 v ----- abc ABC xyz XYZ (4 rows)
「CREATE EXTENTION」「ALTER EXTENTION」「DROP EXTENTION」コマンドで追加提供のモジュールの管理が行えます。これにより、提供されるオブジェクト群を導入するアドホックな方式を置き換えます。
これによりデータベースの外部に格納されたデータを PostgreSQL のデータと同じように扱うことができます。しかしながら、現時点の外部テーブル機能は、参照のみアクセスしかできません。
これにより複合型を修正することができます。
例 =# CREATE TYPE comp_t AS (x int ,y int); CREATE TYPE =# ALTER TYPE comp_t ALTER ATTRIBUTE x TYPE float; ALTER TYPE =# ALTER TYPE comp_t ALTER ATTRIBUTE y TYPE float; ALTER TYPE =# ALTER TYPE comp_t ADD ATTRIBUTE z float; ALTER TYPE
これにより ALTER TYPE … ADD/DROP/ALTER/RENAME ATTIBUTE の振る舞いを変えることができます。RESTRICT を指定した場合の動作がデフォルトでしたが、CASCADE を指定して、その複合型に型付けされたテーブルがある場合には変更が伝播するようになりました。
例
=# CREATE TYPE comp_t AS (x int, y, int, flg boolean); CREATE TYPE =# CREATE TABLE comp_tbl OF comp_t; CREATE TABLE =# INSERT INTO comp_tbl VALUES (10, 10, true); INSERT 0 1 # ALTER TYPE comp_t DROP ATTRIBUTE flg RESTRICT; ERROR: cannot alter type "comp_t" because it is the type of a typed table HINT: Use ALTER ... CASCADE to alter the typed tables too. =# ALTER TYPE comp_t DROP ATTRIBUTE flg CASCADE; ALTER TYPE
型付きテーブルを ALTER TABLE .. NOT OF で単独定義されたテーブルに変更することができます。また、単独に定義済みのテーブルを後から複合型に結びつけることができます。
複合型に結びついた型付きテーブルを作る
=# CREATE TABLE test4 OF comp_a; CREATE TABLE
複合型の束縛を解除
=# ALTER TABLE test4 NOT OF; ALTER TABLE
再び型付きにする
=# ALTER TABLE test4 OF comp_a; ALTER TABLE
CONVERSION、OPERATOR CLASS、OPERATOR FAMILIES、TEXT SEARCH CONFIGRATION、TEXT SEARCH DICTIONARY、TEXT SEARCH PARSER、TEXT SEARCH TEMPLATE に対応しています。
既存インデックスを使ってユニーク制約や主キー制約を追加することができるようになりました。CREATE INDEX CONCURRENTLY で同時作成したインデックスにも摘要できます。
これまで主キー用のインデックスをロック待ちなしに再作成するよい方法がありませんでしたが、この追加により実現できるようになります。
外部キー制約は新たなオプション NOT VALID を持ちます。NOT VALID である場合には値のチェックが行われません。後で、ALTER TABLE .. VALIDATE CONSTRAINT コマンドで有効にしますとそこから値のチェックが行われるようになります。
例
=# SELECT * FROM test5; id | x -----+----- 100 | 1 101 | 3 (2 rows) =# SELECT * FROM test5m; id | v ----+------ 1 | xxxx 2 | xxxx (2 rows) =# ALTER TABLE test5 add constraint "test5_x_fkey" FOREIGN KEY (x) REFERENCES test5m(id) NOT VALID; ALTER TABLE =# ALTER TABLE test5 VALIDATE CONSTRAINT "test5_x_fkey"; ERROR: insert or update on table "test5" violates foreign key constraint "test5_x_fkey" DETAIL: Key (x)=(3) is not present in table "test5m". =# INSERT INTO test5m VALUES (3, 'xxxxx'); INSERT 0 1 =# ALTER TABLE test5 VALIDATE CONSTRAINT "test5_x_fkey"; ALTER TABLE
たとえば、varchar型から text型への変更でテーブルの書き換えは必要なくなります。しかしながら、カラム長を増やす場合には必要となります。
テーブルがない場合だけテーブルを作るという処理をエラーを出さずに行えます。
同時に子テーブルが更新されるのを防ぐため、ALTER TABLE 文は、親テーブルに対してより強いロックを取るようになります。
セキュリティラベルをデータベースオブジェクトに設定することができます。
これまでのセッションレベルの勧告的ロックと似ていますが、トランザクション終了時点で自動的にロックが解放されます。
RESTART IDENTITY オプション自体は以前からありましたが、トランザクション中断時にシーケンスがロールバックしない動作でした。
例
=# CREATE TABLE test6 (id serial, v text); =# INSERT INTO test6 (v) VALUES ('A'), ('B'); =# SELECT * FROM test6; id | v ----+--- 1 | A 2 | B (2 rows) =# BEGIN; =# TRUNCATE test6 RESTART """""""""""""""""""""""""""IDENTITY; """"""""""""""""""""""""""" =# INSERT INTO test6 (v) VALUES ('a'); =# SELECT * FROM test6; id | v ----+--- 1 | a (1 row) =# ABORT; =# INSERT INTO test6 (v) VALUES ('x'); =# SELECT * FROM test6; postgres=# SELECT * FROM test6; id | v ----+--- 1 | A 2 | B 3 | x (3 rows)
ここで 9.0 だと以下のようになってしまいました。
id | v ----+--- 1 | A 2 | B 2 | x
コピーファイルのエンコーディングをクライアントエンコーディングとは別に指定できるようになります。
これはいまのところストリーミングレプリケーションだけで使われます。
例
=# EXPLAIN VERBOSE SELECT id FROM f2(1); QUERY PLAN ------------------------------------------------------------------ Function Scan on public.f2 (cost=0.25..10.25 rows=1000 width=4) Output: id Function Call: f2((1)) (3 rows)
有効タプル・デッドタプルの数、所要時間、CLUSTER が インデックスを使ったかどうか、などが出力されます。これまでは「VACUUM VERBOSE」のときだけ、詳しい出力がされていました。
ロックが取れない場合には後で再試行するようになります。
GiSTインデックスを、ある要素に近いもの上位いくつかを取り出す問い合わせに使うことができます。
例
=# CREATE TABLE test8 (id int, p point); =# CREATE INDEX ON test8 USING gist (p); =# INSERT INTO test8 SELECT g, point(random(), random()) FROM generate_series(1, 10000) as g; =# EXPLAIN SELECT * FROM test8 ORDER BY point(0.5,0.5) <-> p ; QUERY PLAN ---------------------------------------------------------------------------------- Limit (cost=0.00..0.35 rows=5 width=20) -> Index Scan using test8_p_idx on test8 (cost=0.00..696.25 rows=10000 width=20) Order By: (p <-> '(0.5,0.5)'::point) (3 rows)
これにより完全な GIN インデックススキャンができます。また、一部例外的な場合に GINスキャンが失敗するケースが修正されました。
例
=# CREATE TABLE test9 (id int primary key, a text[]); =# CREATE INDEX idx_test9_a ON test9 USING gin (a); =# INSERT INTO test9 VALUES (1, ARRAY[NULL]::text[]);
ここで 9.0.x の場合は GINインデックスがあるために以下エラーになりました。
ERROR: array must not contain null values
不要なインデックス全スキャンを回避できるケースで特に、インデックススキャンの負荷を減らします。
これまでは稀に REINDEX を必要とすることがありました。
これによりクエリ最適化の幅が広がります。たとえばキーが配列であるときにも Hash Join が適用できるようになります。
これは、ソートなしの問い合わせを実行する場合に、実行時に比較関数の障害を確認できないというケースを回避します。ALANYZE においてもそのような複合型に対して不適切な統計情報方法を試みないようになります。
これまでは、常に4バイトヘッダが使われていました。これによりディスク領域を節約できます。
例
=# SELECT 10000::money / 2000::money; ?column? ---------- 5 (1 row)
不必要なオーバーフローを避け、おそらくより正確になります。
なお、逆向きのキャストには対応していません。
例
=# CREATE TYPE comp_x AS (id1 int, id2 int); =# CREATE TABLE t_comp_x OF comp_x; =# SELECT ('(1,2)'::t_comp_x)::comp_x; comp_x -------- (1,2) (1 row) =# SELECT ('(1,2)'::comp_x)::t_comp_x; ERROR: cannot cast type comp_x to t_comp_x
これらは整形式 XML であるかチェックします。これまで追加モジュール contrib/xml2 として提供されていたものです。
いまのところ、文字列、SQLリテラル、識別子の整形に対応しています。数値の整形には対応していません。
例
=# SELECT format('array:%L table:%I', ARRAY[1,2,3], 'Tbl01'); format ------------------------------- array:'{1,2,3}' table:"Tbl01"
これらは他のデータベース製品にある関数で、互換性を改善します。
データベースオブジェクトを人間が読める記述にした文字列を返します。pg_classテーブルの OID、オブジェクトの OID、副オブジェクトID で指定します。pg_dependテーブルの内容を読み取るのに役立ちます。
例
=# SELECT pg_describe_object(classid,objid,objsubid) AS obj, pg_describe_object(refclassid,refobjid,refobjsubid) AS refobj, deptype FROM pg_depend; : (前略) -[ RECORD 5954 ]------------------------------------------------------------ obj | type tbl01 refobj | table tbl01 deptype | i -[ RECORD 5955 ]------------------------------------------------------------ obj | type tbl01[] refobj | type tbl01 deptype | i -[ RECORD 5956 ]------------------------------------------------------------ obj | table tbl01 refobj | schema public deptype | n -[ RECORD 5957 ]------------------------------------------------------------ : (後略)
どの演算子の処理を実装した関数であるかが記述されます。
EXPLAIN や pg_get_viewdef()などのシステムカタログ関数で全ての識別子をクオートして出力するようにできます。スキーマ定義を各種ツールや他のデータベース製品むけに書き出すとき、異なるクオート処理ルールへの対応を容易にします。
これまでビューは存在していましたが、シーケンスパラメータに関するカラムは実装されていませんでした。
これにより完全な更新可能ビューが定義できるようになります。
配列の要素毎に処理を行うループが読みやすく効率的に記述できます。
これまでのコーディングは実行中の例外ハンドラを含むブロックからエラーを投げていました。新しい振る舞いは、他のデータベース製品とより整合します。
レコード型引数は複合型の引数と同じように扱えます。
文字列表現も引き続き利用可能です。
文字列表現も引き続き利用可能です。
複数カラムを複数行返すことができるようになります。
=# CREATE TYPE v AS (x float8, y float8); =# CREATE FUNCTION pyf01 (x int) RETURNS SETOF v LANGUAGE plpython2u AS $$ return ( [1,1], [2,2], [3,3], ) $$; =# SELECT * FROM pyf01(4); x | y ---+--- 1 | 1 2 | 2 3 | 3 (3 rows)
PL/Python関数を作成する時点で構文チェックを行うことができます。
PL/Python の例外ブロックで SQL 例外のエラーコードにアクセスできます。
例外クラスはこれまで Python 3 の PL/Python では使えませんでした。
代替に SQL の CREATE EXTENTION コマンドを使用します。
現在の接続情報を表示します。
dnS でなく dn とした場合、システムスキーマは表示されなくなります。
psql変数 EDITOR_LINENUMBER_SWITCH にしたがってエディタに行番号を渡します。
これはテーブルサイズについてより有用な指標ですが、同様に表示されていたこれまでの値とは意味が異なる点に注意が必要です。
pg_restore コマンドでリストアするための形式で、ひとつのディレクトリが作られます。内部的には tar形式と似ています。
これまでサーバプロセスは稼動していても、pg_ctl がそれを確認できない場合に、サーバが稼動していないと報告されることがありました。
待機モードがより頑健になりました。デフォルト以外のポート番号や Unixドメインソケットの位置、ファイルパーミッションや 古い postmaster のロックファイルなどで混乱することがなくなりました。
スタンバイサーバをプライマリに切り替えます。これまではトリガーファイルを置く方法で行われていました。
PGCLIENTENCODING 環境変数を指定したのと同様の振る舞いとなります。
指定しない場合、クライアントの OS ロケールに基づくエンコーディングがデフォルト値となります。
libpq ライブラリバージョンを返します。
libpq にはサーババージョンを返す PQserverVersion() 関数が既にありました。
サーバから Unixドメインソケットのクライアント側ユーザ名を判定することは、これまでのバージョンでも既にできていました。
新たな接続を開かずにサーバ状態を検出することができます。
より早くコンパイルができます。また、make -k がより一貫性をもって動作します。
これは並列 make の改善にともなうものです。
これは、ビルドや再帰テストに含むには相応しくない各種のソースコードチェックを実行するものです。現在は、初期データにおけるOID重複チェック、SGML文法とtabのチェック、NLS文法チェックが含まれます。
これまでは make installcheck のみが有効でしたが、テンポラリインストールを使った再帰テストに対応するようになりました。
これはトップレベルでの make check-world の対象に含まれます。
デバッグ版でない Windows版バイナリで標準的なデバッグツールで解析できるminidumpデータが生成できます。
これにより 64bit Windows バイナリを Windows 以外のプラットフォームからクロスコンパイルすることができます。
これまでの割り当てフックは、チェックフックと割り当てフック分割されました。この変更はカスタム設定パラメータを持つ追加モジュールに影響があります。
これまでは常に SQL_ASCII で行っていました。
cvs2clスクリプト、pgcvslogスクリプトを置き換えるものです。
git から context diff を生成するのに使います。
COPYコマンドで入出力する形式と似た形式のテキストファイルのデータを外部テーブルとして読むことができます。
マニュアルより抜粋、下記例で a に gist インデックスがあれば利用可能。
SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 ;
これまで空配列を伴う問い合わせはシーケンシャルスキャンの場合とインデックスを使う場合とで、異なる結果が返っていました。
空配列が他の配列に含まれていると正しく認識されます。
これまでは 10個が最大でした。
本修正はマイナス値が返るのを防ぎます。本来の値は符号なし16bit整数です。
これは新たに導入された SECURITY LABEL 機構を使うものです。
認証に失敗したとき応答を遅延します。パスワード総当たり攻撃の防御に使用します。
SECURITY LABEL の再帰テスト用に使います。
以下のように中間一致検索でもインデックスが利用できることになります。
=# CREATE INDEX ON test10 USING gist (v gist_trgm_ops); =# EXPLAIN SELECT * FROM test10 WHERE v LIKE '%京都%'; QUERY PLAN ---------------------------------------------------------------------------- Index Scan using test10_v_idx on test10 (cost=0.00..8.27 rows=1 width=36) Index Cond: (v ~~ '%京都%'::text) (2 rows)
本パラメーターはエラーでセッション(接続)を終了させるものです。
本関数はテーブル格納オプションを出力します。
これまで Solaris 9 むけのものしかありませんでした。
HISTORYファイルは英語ですが、貢献者名に含まれるASCII外の文字に対処が必要です。文字セットの前提なしに読めるようにこれらは翻訳されました。
このリリースは 9.0.3 からの修正リリース(2011/04/18リリース)です。
9.0.x からのアップデートではダンプ、リストアは不要です。
ただし、本バージョンで修正された pg_upgrade の TOAST テーブルの処理の不具合による影響がある場合、本バージョンへのアップデート後、TOAST テーブルに対して VACUUM FREEZE が推奨されます。
このリリースは 8.4.7 からの修正リリース(2011/04/18リリース)です。
8.4.x からのアップデートではダンプ、リストアは不要です。
また、8.4.2 より前のバージョンからアップデートを行う場合は 8.4.2 に関する技術情報を参照してください。
このリリースは 8.2.20 からの修正リリース(2011/04/18リリース)です。
8.2.x からのアップデートではダンプ、リストアは不要です。
また、8.2.14 より前のバージョンからアップデートを行う場合は 8.2.14 に関する技術情報を参照してください。
このリリースは 8.3.14 からの修正リリース(2011/04/18リリース)です。
8.3.x からのアップデートではダンプ、リストアは不要です。
また、8.3.8 より前のバージョンからアップデートを行う場合は 8.3.8 に関する技術情報を参照してください。
このリリースは 9.0.2 からの修正リリース(2011/01/31リリース)です。
9.0.x からのアップデートではダンプ、リストアは不要です。