VTRyo Blog

一歩ずつ前に進むブログ

RedashのData Sourcesを解除してQueriesが吹き飛んだときの対処

f:id:vtryo:20180714152616p:plain

ども。

「あ!!登録しているクエリが全部消えている!!」などという経験はありますか。

いやデータソースってめったに消したりしないと思うんですけど、今回ぼくはいろんな経緯があってやっちまったんですよね。

Data Sourcesの登録を削除するとクエリも全部消える

今回僕がやっちまったのはData Sourceの登録解除でした。画面上は「Delete」です。

f:id:vtryo:20181026231906p:plain

まあその経緯っていうのは完全に機密情報に触れそうなので、そこはスキップします。

で、今回気づかなかったのは、Data SourceをDeleteするとそこに紐付いていたクエリも消えるということ。

あとで見返したらびっくりしました。

みなさんは気をつけてください。

Redashそのもののデータベースに入って書き換える

結論いうと、この方法で解決しました。

解決したあと見つけたんですが、Redashのコミュニティにも同じような内容の相談があったようです。

discuss.redash.io

この辺は英語で調べればすぐにヒットします。"redash datasource delete"とか。

前提

作業する前に、確認しておきます。

環境

  • Redash 4.0.1+b4038
  • AWSのAMIから構築

事象

  • Data Sourceの登録を削除したことで登録していたQueriesが全部消えた(ように見えた)
  • ダッシュボードはなぜか残っている(からっぽだけど)
  • ユーザ、グループ、権限などは残っていた

他のデータが残っていたので、Data Sourceとの紐付けだけだと判断できそうでした。

Data Sourceの紐づけがなくなったことで、単に見えなくなったと思った方が良さそうでした。

データベースでの作業

RedashのデータベースはPostgreSQLでできてるのと、Redashの公式イメージを使って構築している場合はログイン方法があちこちに載っています。

  • ログイン
sudo -u postgres psql redash
  • テーブル一覧を確認
redash=# \dt;
                  List of relations
 Schema |           Name            | Type  | Owner
--------+---------------------------+-------+--------
 public | access_permissions        | table | redash
 public | alembic_version           | table | redash
 public | alert_subscriptions       | table | redash
 public | alerts                    | table | redash
 public | api_keys                  | table | redash
 public | changes                   | table | redash
 public | dashboards                | table | redash
 public | data_source_groups        | table | redash
 public | data_sources              | table | redash
 public | events                    | table | redash
 public | groups                    | table | redash
 public | notification_destinations | table | redash
 public | organizations             | table | redash
 public | queries                   | table | redash
 public | query_results             | table | redash
 public | query_snippets            | table | redash
 public | users                     | table | redash
 public | visualizations            | table | redash
 public | widgets                   | table | redash
(19 rows)
  • Data Sourceのテーブルを確認
redash=# \d data_sources;
                                         Table "public.data_sources"
        Column        |           Type           |                         Modifiers
----------------------+--------------------------+-----------------------------------------------------------
 id                   | integer                  | not null default nextval('data_sources_id_seq'::regclass)
 org_id               | integer                  | not null
 name                 | character varying(255)   | not null
 type                 | character varying(255)   | not null
 options              | text                     | not null
 queue_name           | character varying(255)   | not null
 scheduled_queue_name | character varying(255)   | not null
 created_at           | timestamp with time zone | not null
  • Queriesのテーブルを確認
redash=# \d queries;
                                         Table "public.queries"
        Column        |           Type           |                      Modifiers
----------------------+--------------------------+------------------------------------------------------
 updated_at           | timestamp with time zone | not null
 created_at           | timestamp with time zone | not null
 id                   | integer                  | not null default nextval('queries_id_seq'::regclass)
 version              | integer                  | not null
 org_id               | integer                  | not null
 data_source_id       | integer                  |
 latest_query_data_id | integer                  |
 name                 | character varying(255)   | not null
 description          | character varying(4096)  |
 query                | text                     | not null
 query_hash           | character varying(32)    | not null
 api_key              | character varying(40)    | not null
 user_id              | integer                  | not null
 last_modified_by_id  | integer                  |
 is_archived          | boolean                  | not null
 is_draft             | boolean                  | not null
 schedule             | character varying(10)    |
 schedule_failures    | integer                  | not null
 options              | text                     | not null
 search_vector        | tsvector                 |

data_source_idを持っていました。

  • Queriesのテーブルを確認して見えなくなったQueriesが残っているか確認する
select queries from queries limit 3;

※このコマンドによって、見えなくなったQueriesがレコードに残っていることが確認できました。

あとは新たに作成したData SourceのIDを調べて、Queriesテーブルのdata_source_idに上書きすればよいということになります。

  • ついでに見えなくなったQueriesがどのData SourceのIDになっているか見る
select data_source_id from queries;

僕の場合は何も出力されませんでした。


  • Data SourceのIDを確認する

これで新たに作成したData SourceのIDを確認しておきます。

select * from data_sources;
  • IDを上書きする

上書きが心配ならdump、スナップショットなりバックアップをとっておきましょう。

update queries set data_source_id = <新しいデータソースID> ;

この上書き作業によって、新しいData Sourceに紐付きます。

これで解決です!><

Web画面を見にくと、吹き飛ばしたQueriesがみれるように…!

おわりに

知恵を貸してくださった皆さん、ありがとうございました!