postgresのシーケンス一覧を取得ならびに変更する

はじめに

redashの内部のDBはpostgresだが、version upを繰り返すうちにDB構成がバグってしまった。具体的には外部キーや、Indexなのが外れてしまった。

根本対応としては再度イチからredashを作り、そこにデータを一個一個転送することになるとおもうが、なかなかその対応にたどり着けず、一時対応でとりあえず問題を先送りしている。

ちなみにusersテーブルの場合、以下の部分がごっそり無くなっていた

その結果、Edit Visualizationで保存ができなくなった。

コンテナのログを見たら、本来1つしかないはずが2つ以上ヒットするよ。とエラーになっているのが原因だとわかった。

シーケンスで指している数字が、すでにレコードとして存在していたのが問題だ。

今回はシーケンスを変更することで対処した。

Postgresのシーケンス一覧を表示する

 SELECT c.relname FROM pg_class c LEFT join pg_user u ON c.relowner = u.usesysid WHERE c.relkind = 'S'; relname  で表示できる。

redashに限らず、どのPostgresでも対応可能。

シーケンスの値を確認する

56ということがわかる

シーケンスの値を変更する

ALTER SEQUENCEコマンドで変更が可能

 

結果、redashが正常に動くようになった。

おそらくversion upを繰り返しているうちに、どこかでDBスキーマが壊れてしまった可能性がある。

 

関連記事

redashでALL Queriesを選択すると “Loading…” のままで変わらない