質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

2675閲覧

Postgresのバージョンを変えるとエラーが出るようになりました

kenken2

総合スコア10

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/02/19 05:18

前提・実現したいこと

DBサーバを入れ替えることになり、PostgreSQLを9.3から10.0にあげDBを再構築したところ
これまで出なかったエラーが出るようになりました。

発生している問題・エラーメッセージ

message には
Feb 18 14:13:21 xxxxx02 kernel: postmaster[10247]: segfault at 0 ip 0000000000833523 sp 00007ffeb0a54fb0 error 4 in postgres[400000+67b000]

といったエラーが何度も表示され、その時のpostgreSQLのログを見てみると以下のようなログが残っています。

2019-02-18 14:13:21.839 JST [10237] LOG: server process (PID 10247) was terminated by signal 11: Segmentation fault 2019-02-18 14:13:21.839 JST [10237] DETAIL: Failed process was running: SELECT id FROM bibliographies WHERE request_bibliography_flag = false and hs_type = '000' and id in(SELECT bibliography_id FROM materials WHERE organization_id = 1 and status in('120','200','210','230','300','310','320','330','340') and separate_shelf_code in('B','S','R') and ((special_start_datetime <= '201902111052' and special_end_datetime >= '201902111052' and special_library_id in (10) ) or (transfer_start_datetime <= '201902111052' and transfer_end_datetime >= '201902111052' and transfer_library_id in (10) AND ((special_library_id IS NULL) OR (NOT(special_start_datetime <= '201902111052' and special_end_datetime >= '201902111052')) )) or (owner_library_id in (10) AND ((special_library_id IS NULL AND transfer_library_id IS NULL) OR (special_library_id IS NULL AND (NOT(transfer_start_datetime <= '201902111052' and transfer_end_datetime >= '201902111052'))) OR (transfer_library_id IS NULL AND (NOT(special_start_datetime <= '201902111052' and special_end_datetime >= '201902111052'))) OR (NOT(special 2019-02-18 14:13:21.839 JST [10237] LOG: terminating any other active server processes 2019-02-18 14:13:21.839 JST [10243] WARNING: terminating connection because of crash of another server process 2019-02-18 14:13:21.839 JST [10243] DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory. 2019-02-18 14:13:21.839 JST [10243] HINT: In a moment you should be able to reconnect to the database and repeat your command. 2019-02-18 14:13:21.839 JST [10334] FATAL: the database system is in recovery mode 2019-02-18 14:13:21.846 JST [10237] LOG: all server processes terminated; reinitializing 2019-02-18 14:13:22.233 JST [10335] LOG: database system was interrupted; last known up at 2019-02-18 14:10:54 JST 2019-02-18 14:13:22.302 JST [10335] LOG: database system was not properly shut down; automatic recovery in progress 2019-02-18 14:13:22.307 JST [10335] LOG: redo starts at 7B/2D1E68F8 2019-02-18 14:13:22.307 JST [10335] LOG: invalid record length at 7B/2D1E6930: wanted 24, got 0 2019-02-18 14:13:22.307 JST [10335] LOG: redo done at 7B/2D1E68F8 2019-02-18 14:13:22.445 JST [10237] LOG: database system is ready to accept connections

日付の部分は都度変わりますがSQL文は同じものです。

試したこと

他にいくつものSQLが流れているのですが、ログに出ているコマンドは必ずエラーになります。
同じコマンドを旧サーバで流してもエラーになりません。

開発業者は、postgreSQL 10.2まではメモリ関係のバグが多く存在しているのでそのせいだろうということで
10.7へのバージョンアップで解決するとの提案が出ているのですが、原因が解明していない状態でアップデートしても
2度手間3度手間になる可能性があり躊躇しています。

補足情報(FW/ツールのバージョンなど)

サーバは
旧サーバ RHEL 6.3
新サーバ RHEL 6.10
です。

何か原因らしきものが分かりますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/02/19 05:20

ひとつのサーバー内にpgsqlが複数バージョンあるかんじですか?
kenken2

2019/02/19 05:22

いいえ、物理的に別のサーバでそこに引っ越しをする予定です。
sazi

2019/02/19 06:29

フロントの言語は何でしょう?ドライバー関係も確認済みなんでしょうか?
kenken2

2019/02/19 07:46

フロントの言語の回答になっているか分かりませんが、 Webサーバ(rails 4.2.3 ruby 2.2) APサーバ(rails 4.2.3 ruby 2.2) DBサーバ となっています。 ドライバー関係の確認は恐らくできておりません。どこを確認すればよいかわかれば開発業者に確認してもらいます。
m.ts10806

2019/02/19 07:48

> 開発業者に確認してもらいます。 自身で作られたものではなかったのですね。 なぜ最初からその業者に依頼しないのでしょうか?
kenken2

2019/02/19 07:56

開発業者は10.7にあげればいいのでは、と言ってきているのですが確証なくバージョンアップしてダメだった場合無駄な工数が発生してしまうのを避けたいのです。
m.ts10806

2019/02/19 07:59 編集

バージョンアップでOKとしても同じ内容を確認することになります。 もし気になるのでしたらローカルで提示のバージョンをインストールし、 同様のテーブルとサンプルデータをミニマム構成で作成し、同SQLを実行してみれば良いのではないでしょうか?
kenken2

2019/02/19 08:30

やはり、とりあえず10.7で試してみるしかないですね。
m.ts10806

2019/02/19 08:39

コメントにも書いてますが、いきなり本番データで試すのではなくローカルで環境作って試してくださいね。いずれにしてもバックアップは必須です
kenken2

2019/02/19 09:01

分かりました。ありがとうございます。
kenken2

2019/02/27 10:44

バージョンを上げて、当該のSQLを流したらエラーにならなくなりました。そもそも何が原因だったか調べる方法はあるのでしょうか。
guest

回答1

0

環境が残っていればですけど、データ件数を確認されてみてください。
データベースを削除せずにリストアを繰り返して、データが重複しているのかもしれません。

投稿2019/03/01 05:41

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenken2

2019/03/01 10:14

データベースを再構築したようなので、件数はあっています。データが重複していると今回のようなエラーが出るのでしょうか。
sazi

2019/03/01 11:07 編集

結合した結果の件数が漸近的に増加し無応答になる場合があります。 結果タイムアウト値の設定などがあると切断される事になります。
sazi

2019/03/01 11:10

バージョン間の互換性を疑うより、手順やデータによる起因の方が可能性は高いと思われます。
kenken2

2019/03/04 04:32

もう少し教えてください。 無応答でタイムアウトした場合も、Segmentation fault になるのでしょうか。 結合した結果が漸近的に増加しというのはどういった状態を指すのでしょうか。 よろしくお願いします。
sazi

2019/03/04 05:09 編集

無応答と言ったのはサーバーのプロセスが応答しなくなった場合です。 ログの内容では「サーバープロセスが異常終了し、共有メモリが破損している可能性がある」とあります。 内部的な事についてはあくまで推測の域は出ませんが、メモリの枯渇など何らかの不整合が生じたのでないかと思われます。 確認の為には、再構築後の環境ではなく、再現させるしか無いと思います。
sazi

2019/03/04 05:11

過去にリストアを重複して行った時に、SELECTが返却されないケースを経験していますので、参考程度ですが。
kenken2

2019/03/04 05:58

ありがとうございました。 エラーが発生したDBを使って再現できるかやってみます。
kenken2

2019/03/04 06:00

最初に戻ってしまうようですが、何が起こったか確かめる方法はありますでしょうか。
sazi

2019/03/04 06:04

pgadmin でサーバー稼働状況を監視してみて下さい。
kenken2

2019/03/04 06:20

ありがとうございました。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問