リリース日: 2004-03-08
このリリースは7.4.1の様々な不具合を修正したものです。 7.4メジャーリリースにおける新機能についてはE.304を参照してください。
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_statistic
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 macOS (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