ども。
「あ!!登録しているクエリが全部消えている!!」などという経験はありますか。
いやデータソースってめったに消したりしないと思うんですけど、今回ぼくはいろんな経緯があってやっちまったんですよね。
Data Sourcesの登録を削除するとクエリも全部消える
今回僕がやっちまったのはData Sourceの登録解除でした。画面上は「Delete」です。
まあその経緯っていうのは完全に機密情報に触れそうなので、そこはスキップします。
で、今回気づかなかったのは、Data SourceをDeleteするとそこに紐付いていたクエリも消えるということ。
あとで見返したらびっくりしました。
みなさんは気をつけてください。
Redashそのもののデータベースに入って書き換える
結論いうと、この方法で解決しました。
解決したあと見つけたんですが、Redashのコミュニティにも同じような内容の相談があったようです。
この辺は英語で調べればすぐにヒットします。"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がみれるように…!
おわりに
知恵を貸してくださった皆さん、ありがとうございました!