superset
superset copied to clipboard
Superset Unable to Save Database Configurations in Database
Bug description
We are running Superset via helm chart (version 0.12.9) and running aurora postgres on AWS as the database backend. In the UI we are able to successfully test a connection. However, when we click "Connect" we receive a "Fatal Error." When we check the pod, we get this stack trace:
Traceback (most recent call last): │
│ superset File "/app/superset/commands/database/create.py", line 99, in run │
│ superset db.session.commit() │
│ superset File "<string>", line 2, in commit │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1435, in commit │
│ superset self._transaction.commit(_to_root=self.future) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 829, in commit │
│ superset self._prepare_impl() │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl │
│ superset self.session.flush() │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3367, in flush │
│ superset self._flush(objects) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3506, in _flush │
│ superset with util.safe_reraise(): │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ │
│ superset compat.raise_( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_ │
│ superset raise exception │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 3467, in _flush │
│ superset flush_context.execute() │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute │
│ superset rec.execute(self) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute │
│ superset util.preloaded.orm_persistence.save_obj( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 245, in save_obj │
│ superset _emit_insert_statements( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1238, in _emit_insert_statements │
│ superset result = connection._execute_20( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1631, in _execute_20 │
│ superset return meth(self, args_10style, kwargs_10style, execution_options) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection │
│ superset return connection._execute_clauseelement( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement │
│ superset ret = self._execute_context( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1725, in _execute_context │
│ superset self._handle_dbapi_exception( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2043, in _handle_dbapi_exception │
│ superset util.raise_( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_ │
│ superset raise exception │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1719, in _execute_context │
│ superset context = constructor( │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1091, in _init_compiled │
│ superset param = { │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1092, in <dictcomp> │
│ superset key: processors[key](compiled_params[key]) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/type_api.py", line 1631, in process │
│ superset return impl_processor(process_param(value, dialect)) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy_utils/types/encrypted/encrypted_type.py", line 471, in process_bind_param │
│ superset value = super().process_bind_param(value=value, dialect=dialect) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy_utils/types/encrypted/encrypted_type.py", line 397, in process_bind_param │
│ superset self._update_key() │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy_utils/types/encrypted/encrypted_type.py", line 392, in _update_key │
│ superset self.engine._update_key(key) │
│ superset File "/usr/local/lib/python3.10/site-packages/sqlalchemy_utils/types/encrypted/encrypted_type.py", line 52, in _update_key │
│ superset digest.update(key) │
│ superset sqlalchemy.exc.StatementError: (builtins.TypeError) argument 'data': a bytes-like object is required, not 'tuple' │
│ superset [SQL: INSERT INTO dbs (uuid, created_on, changed_on, verbose_name, database_name, sqlalchemy_uri, password, cache_timeout, select_as_create_table_as, expose_in_sqllab, configuration_method, allow_run_async, allow_file_upload, allow_ │
│ superset [parameters: [{'configuration_method': <ConfigurationMethod.DYNAMIC_FORM: 'dynamic_form'>, 'password': [redacted], 'sqlalchemy_uri': 'postgresql+psycop ... (213 characters truncated) ... ows_virtual_table_explore":true}' │
│ superset
We have gotten this in helm chart installs locally as well (without AWS hosted dbs) and have confirmed that the user can insert into the dbs
table. This behavior has been seen in attempting to create connections to both Redshift and Postgres databases.
How to reproduce the bug
Go to "Settings" -> "Database Connections" in the UI, then click on "+Database".
Fill out the form to connect to a database, test the connection then press "Connect". This is where the error pops up.
Screenshots/recordings
No response
Superset version
master / latest-dev
Python version
3.9
Node version
16
Browser
Chrome
Additional context
Traceback (most recent call last): │
│ superset File "/app/superset/commands/database/create.py", line 99, in run │
│ superset db.session.commit() │
│ superset File "
Checklist
- [X] I have searched Superset docs and Slack and didn't find a solution to my problem.
- [X] I have searched the GitHub issue tracker and didn't find a similar bug report.
- [X] I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.