从 Apache Superset 中删除实体时出现 500 错误

500 error when deleting entities from Apache Superset

我遇到了一个问题,当我尝试从 Apache Superset 删除图表或用户或仪表板时抛出网络 UI(在 Kubernetes 上使用 helm 安装),浏览器收到 500 错误并且日志表明如下:

 superset-prod-6785cd75df-zqp5j superset] [SQL: SELECT report_schedule.created_on AS report_schedule_created_on, report_schedule.changed_on AS report_schedule_changed_on, report_schedule.id AS report_schedule_id, report_schedule.type AS report_schedule_type, report_schedule.name AS report_schedule_name, report_schedule.description AS report_schedule_description, report_schedule.context_markdown AS report_schedule_context_markdown, report_schedule.active AS report_schedule_active, report_schedule.crontab AS report_schedule_crontab, report_schedule.sql AS report_schedule_sql, report_schedule.chart_id AS report_schedule_chart_id, report_schedule.dashboard_id AS report_schedule_dashboard_id, report_schedule.database_id AS report_schedule_database_id, report_schedule.last_eval_dttm AS report_schedule_last_eval_dttm, report_schedule.last_state AS report_schedule_last_state, report_schedule.last_value AS report_schedule_last_value, report_schedule.last_value_row_json AS report_schedule_last_value_row_json, report_schedule.validator_type AS report_schedule_validator_type, report_schedule.validator_config_json AS report_schedule_validator_config_json, report_schedule.log_retention AS report_schedule_log_retention, report_schedule.grace_period AS report_schedule_grace_period, report_schedule.working_timeout AS report_schedule_working_timeout, report_schedule.created_by_fk AS report_schedule_created_by_fk, report_schedule.changed_by_fk AS report_schedule_changed_by_fk
  FROM report_schedule
  WHERE report_schedule.chart_id = %(chart_id_1)s]
  [parameters: {'chart_id_1': '51'}]
  (Background on this error at: http://sqlalche.me/e/13/f405)
  Traceback (most recent call last):
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
      cursor, statement, parameters, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
      cursor.execute(statement, parameters)
  psycopg2.errors.UndefinedColumn: column report_schedule.working_timeout does not exist
  LINE 1: ...ule.grace_period AS report_schedule_grace_period, report_sch...
                                                               ^
 
 
  The above exception was the direct cause of the following exception:
 
  Traceback (most recent call last):
    File "/usr/local/lib/python3.7/site-packages/flask_appbuilder/api/__init__.py", line 84, in wraps
      return f(self, *args, **kwargs)
    File "/app/superset/views/base_api.py", line 80, in wraps
      duration, response = time_function(f, self, *args, **kwargs)
    File "/app/superset/utils/core.py", line 1484, in time_function
      response = func(*args, **kwargs)
    File "/app/superset/utils/log.py", line 125, in wrapper
      value = f(*args, **kwargs)
    File "/app/superset/charts/api.py", line 383, in delete
      DeleteChartCommand(g.user, pk).run()
    File "/app/superset/charts/commands/delete.py", line 49, in run
      self.validate()
    File "/app/superset/charts/commands/delete.py", line 64, in validate
      reports = ReportScheduleDAO.find_by_chart_id(self._model_id)
    File "/app/superset/reports/dao.py", line 45, in find_by_chart_id
      .filter(ReportSchedule.chart_id == chart_id)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3373, in all
      return list(self)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3535, in __iter__
      return self._execute_and_instances(context)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3560, in _execute_and_instances
      result = conn.execute(querycontext.statement, self._params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
      return meth(self, multiparams, params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
      return connection._execute_clauseelement(self, multiparams, params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
      distilled_params,
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
      e, statement, parameters, cursor, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
      sqlalchemy_exception, with_traceback=exc_info[2], from_=e
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
      raise exception
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
      cursor, statement, parameters, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
      cursor.execute(statement, parameters)
  sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedColumn) column report_schedule.working_timeout does not exist
  LINE 1: ...ule.grace_period AS report_schedule_grace_period, report_sch...
                                                  ^

似乎 Superset 的支持数据库与 python 代码不匹配。

在 2021 年 1 月 17 日左右将超集 docker 映像版本升级到 apache/superset:latest 后,此问题似乎已得到解决。希望获得更深入的答案,但认为说明此问题很重要对我来说不再是问题。