Pivotal Knowledge Base

フォローする

"ERROR: could not open relation with OID 0 (heapam.c:883)" というエラーでシステムテーブルの生成に失敗する

環境

製品 バージョン
Pivotal Greenplum(GPDB) 4.3.5.x
OS RHEL 6.x

事象

システムテーブルの生成に失敗する。

この問題は、gpperfmon データーベースの更新にも影響する可能性がある。

エラーメッセージ:

以下のエラー例の通り、テーブル生成自体は成功しているが、関連するインデックステーブルの生成に失敗している。

mpp_test=# create table t1(a int) distributed by (a);
CREATE TABLE
mpp_test=# create index t1_idx on t1 using bitmap(a);
ERROR:  could not open relation with OID 0 (heapam.c:883) 

このエラーは gpperfmon データベースの更新でも発生する。

2015-11-17 11:31:16.316936 GMT,"gpmon","gpperfmon",p17642,th985237280,"[local]",,2015-11-17 11:31:16 GMT,358829,con64237,cmd1,seg-1,,dx45103,x358829,sx1,"ERROR","XX000","could not open relation with OID 0 (heapam.c:883)",,,,,,"insert into log_alert_history select * from log_alert_tail;",0,,"heapam.c",883,"Stack trace:
1    0xad6b4a postgres  (elog.c:506)
2    0xad8cd8 postgres elog_finish (elog.c:1454)
3    0x4d63f8 postgres relation_open (heapam.c:883)
4    0x5b212a postgres GetAllAOCSFileSegInfo (aocssegfiles.c:215)
5    0x89d293 postgres get_relation_info (plancat.c:534)
6    0x8a2233 postgres build_simple_rel (relnode.c:122)
7    0x85e43c postgres add_base_rels_to_query (initsplan.c:93)
8    0x8664e6 postgres query_planner (planmain.c:172)
9    0x86a5a0 postgres  (planner.c:1531)
10   0x86e113 postgres standard_planner (planner.c:817)
11   0x86ecde postgres planner (planner.c:305)
12   0x966679 postgres  (postgres.c:812)
13   0x969a19 postgres PostgresMain (postgres.c:4675)
14   0x8c701e postgres  (postmaster.c:6688)
15   0x8c9db0 postgres PostmasterMain (postmaster.c:7621)
16   0x7c854f postgres main (main.c:206)
17   0x7f0037b10d5d libc.so.6 __libc_start_main (??:0)
18   0x48a6f9 postgres  (??:0)
"

原因

CREATE TABLE コマンドでテーブルを生成する際、テーブルストレージオプションに、gp_default_storage_options パラメーターの内容がデフォルト値として設定される。

当該パラメーターが設定されると、システムテーブルのテーブルストレージオプションにも当該値が上書きされる。

例えば、インデックス等、システムテーブルを生成すると、テーブルストレージオプションとして HEAP 型が設定されていることが期待されるのに、gp_default_storage_options に設定された APPENDONLY 型で生成しようとして失敗するといったケースが考えられる。

解決策

本問題を解決するには 2 つの方法がある。

  1. GPDB 4.3.6.0 以降にバージョンアップする。
  2. あるいは、gp_default_storage_options パラメーターに null を設定する。この変更は、システムレベルとデータベースレベルのいずれかで実行することができる。

オプション 1: システムレベルのパラメーター変更:

以下のコマンドを実行する。 

mpp_test=# set gp_default_storage_options='';
SET
mpp_test=# create index t1_idx on t1 using bitmap(a);
CREATE INDEX

オプション 2: データベースレベルのパラメーター変更:

以下のコマンドを実行する。

gpadmin=# ALTER DATABASE mpp_test SET gp_default_storage_options='';
ALTER DATABASE
gpadmin=# \c mpp_test
You are now connected to database "mpp_test" as user "gpadmin".
mpp_test=# create index t1_idx on t1 using bitmap(a);
CREATE INDEX

コメント

Powered by Zendesk