★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.302. リリース7.4.2

リリース日: 2004-03-08

このリリースは7.4.1の様々な不具合を修正したものです。 7.4メジャーリリースにおける新機能についてはE.304を参照してください。

E.302.1. バージョン7.4.2への移行

7.4.Xからの移行の場合は ダンプ/リストアは必要ありません。 しかしながら、これは初期の7.4.Xシステムカタログの内容に存在した2つのエラーの修正を組み込む最も簡単な方法としてお勧めできます。 7.4.2のinitdbを使用したダンプ、initdb、再ロードという流れにより、自動的にこの問題が修正されます。

この2つのエラーのより深刻な点は、anyarrayデータ型が間違った整列ラベルを持っていたことです。 pg_statisticシステムカタログがanyarray型の列を使用しているため、これは問題です。 この間違ったラベル付けにより、doubleで整列された列(float8timestampなど)を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';

E.302.2. 変更点

リリース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