Pivotal Knowledge Base

フォローする

スクリプト - postgresql.conf におけるパラメーターの追加・削除

問題

  • postgresql.conf に間違ったエントリーを追加してしまい、データベースが起動できなくなった。無効なパラメーターを削除するため gpconfig を使おうとするも、データベースが起動しないので使えない。このような状況で、一度に全てのセグメントから無効なエントリーを削除するにはどうしたらよいのか。
  • 全てのセグメントクラスターの postgresql.conf におけるパラメーターの追加・削除方法を知りたい。

解決策

以下に示すスクリプト一式をマスターデータベースにアップロードし、マスターオンリーモードでデータベースを起動する必要がある。

マスターデータベース自体に、postgresql.conf の無効なエントリーによって問題が発生している場合は、当該 postgresql.conf から手動でそれらを削除し、以下のコマンドを用いてマスターを起動する。

gpstart -am

-- postgresql.conf ファイルのバックアップを取得

PGOPTIONS='-c gp_session_role=utility' psql template1 -Atc " SELECT 'ssh '||hostname 
       ||' \"cp '|| f.fselocation 
       ||'/postgresql.conf ' 
       || f.fselocation 
       || '/postgresql.conf.backupcopy\"' 
FROM pg_filespace_entry f , pg_tablespace t , gp_segment_configuration c
WHERE f.fsefsoid=t.spcfsoid 
AND c.dbid=f.fsedbid
AND t.oid=1663 " > /tmp/backup_postgresql.conf

以下のようにスクリプトを実行する。

/bin/sh /tmp/backup_postgresql.conf

-- postgresql.conf にエントリーを追加

本来であれば、エントリー追加のためには "gpconfig" が使用可能であるが、何らかのの理由で gpconfig が実行できなかったり、失敗する場合は以下のスクリプトを使用することで対処可能である。

ただし、<parameter-to-add=value> の部分は、postgresql.conf に実際に追加したいエントリーに置き換えること。

PGOPTIONS='-c gp_session_role=utility' psql template1 -Atc " SELECT 'ssh '||hostname 
       ||' \"echo <parameter-to-add=value> >> '|| f.fselocation 
       ||'/postgresql.conf\"' 
FROM pg_filespace_entry f , pg_tablespace t , gp_segment_configuration c
WHERE f.fsefsoid=t.spcfsoid 
AND c.dbid=f.fsedbid
AND t.oid=1663 " > /tmp/add_postgresql.conf

以下のようにスクリプトを実行する。

/bin/sh /tmp/add_postgresql.conf

-- postgresql.conf からエントリーを削除

ただし、<parameter-to-remove> の部分は、postgresql.conf から実際に削除したいパラメーターやパラメーターを一意に識別することが可能な文字列に置き換えること。

PGOPTIONS='-c gp_session_role=utility' psql template1 -Atc " SELECT 'ssh '||hostname 
       ||' \"grep -v <parameter-to-remove> '|| f.fselocation 
       ||'/postgresql.conf.backupcopy > '
       || f.fselocation 
       || '/postgresql.conf\"' 
FROM pg_filespace_entry f , pg_tablespace t , gp_segment_configuration c
WHERE f.fsefsoid=t.spcfsoid 
AND c.dbid=f.fsedbid
AND t.oid=1663 " > /tmp/remove_postgresql.conf

以下のようにスクリプトを実行する。

/bin/sh /tmp/remove_postgresql.conf

コメント

Powered by Zendesk