リリース日: 2004-03-08
このリリースは7.4.1の様々な不具合を修正したものです。
7.4.Xからの移行の場合は ダンプ/リストアは必要ありません。 しかし、これは初期の7.4.Xシステムカタログの内容に存在した2つのエラーの修正を組み込む最も簡単な方法としてお勧めできます。 7.4.2のinitdbを使用したダンプ、initdb、再ロードという流れにより、自動的にこの問題が修正されます。
この2つのエラーのより深刻な点は、anyarrayデータ型が間違った整列ラベルを持っていたことです。 pg_statisticシステムカタログがanyarray型の列を使用しているため、これは問題です。 この間違ったラベル付けにより、doubleで整列された列(float8やtimestampなど)をWHERE句に含む問い合わせの計画を作成中、プランナは間違った推定を行ない、最悪はクラッシュしてしまいます。 initabや後述の手作業による修復手順に従って、全てのインストレーションでこのエラーを修復することを強く推奨します。
あまり深刻ではないエラーは、SETの代わりにUPDATE pg_settingsを使用できるようにpg_settingsシステムビューの出力がpublicに対して更新アクセス可能すべきでした。 これは、initdbや手作業で修正することができますが、UPDATE pg_settingsを使用したいのでない限り修正する必要はありません。
initdbを実行したくなければ、以下の手順でpg_statisticを修正することができます。 データベーススーパーユーザで実行してください。
-- clear out old data in pg_statistic: DELETE FROM pg_statistic; VACUUM pg_statistic; -- this should update 1 row: UPDATE pg_type SET typalign = 'd' WHERE oid = 2277; -- this should update 6 rows: UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277; -- -- At this point you MUST start a fresh backend to avoid a crash! -- -- repopulate pg_statistic: ANALYZE;
これは稼働中のデータベースに対して行なうことができますが、変更したデータベースで実行中の全てのバックエンドは、pg_statisticを安全に更新させるために、再起動されなければなりません。
pg_settingsエラーを修復するには単に以下を実行してください。
GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
上述の手順は、template1を含むインストレーションの全てのデータベースに対して行なわなければなりません。理想をいえばtemplate0にも行なってください。 テンプレートデータベースに対して修復を行なわないと、将来作成されるデータベースに同じエラーが含まれることになります。 template1は他のデータベースと同様の方法で修正できますが、template0の修正には更に手順が必要です。 まず、任意のデータベースから以下を発行してください。
UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
次にtemplate0に接続し、上の手順を実行してください。 最後に以下を実行してください。
-- re-freeze template0: VACUUM FREEZE; -- and protect it against future alterations: UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
リリース7.4.2には、リリース7.3.6で行なわれた修正に加え、以下の修正が組み込まれています。
Fix pg_statistics alignment bug that could crash optimizer
See above for details about this problem.
Allow non-super users to update pg_settings
Fix several optimizer bugs, most of which led to "variable not found in subplan target lists" errors
Avoid out-of-memory failure during startup of large multiple index scan
Fix multibyte problem that could lead to "out of memory" error during COPY IN
Fix problems with SELECT INTO / CREATE TABLE AS from tables without OIDs
Fix problems with alter_table regression test during parallel testing
Fix problems with hitting open file limit, especially on OS X (Tom)
Partial fix for Turkish-locale issues
initdb will succeed now in Turkish locale, but there are still some inconveniences associated with the i/I problem.
Make pg_dump set client encoding on restore
Other minor pg_dump fixes
Allow ecpg to again use C keywords as column names (Michael)
Added ecpg WHENEVER NOT_FOUND to SELECT/INSERT/UPDATE/DELETE (Michael)
Fix ecpg crash for queries calling set-returning functions (Michael)
Various other ecpg fixes (Michael)
Fixes for Borland compiler
Thread build improvements (Bruce)
Various other build fixes
Various JDBC fixes