superset: Cannot create table with same name from a different datasource

Make sure these boxes are checked before submitting your issue - thank you!

  • I have checked the superset logs for python stacktraces and included it here as text if any
  • I have reproduced the issue with at least the latest released version of superset
  • I have checked the issue tracker for the same issue and I haven’t found one similar

Superset version

0.19.1

Expected results

That you could add the same table from a differnet datasource

Actual results

(raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (sqlite3.IntegrityError) UNIQUE constraint failed: tables.table_name [SQL: ‘INSERT INTO tables (created_on, changed_on, description, default_endpoint, is_featured, filter_select_enabled, “offset”, cache_timeout, params, perm, table_name, main_dttm_col, database_id, fetch_values_predicate, user_id, schema, sql, created_by_fk, changed_by_fk) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)’] [parameters: (‘2017-11-10 16:36:45.635385’, ‘2017-11-10 16:36:45.635417’, None, None, 0, 0, 0, None, None, None, ‘<table_name>’, None, 2, None, None, ‘’, None, None, None)]

Steps to reproduce

We have a few datasources using the same schema. We would like to configure query tables from each.

It seems an easy fix would be just to change this line: https://github.com/apache/incubator- superset/blob/master/superset/migrations/versions/4e6a06bad7a8_init.py#L84 to sa.UniqueConstraint('table_name', 'database_id'). This line does have such a constraint ( with schema too), https://github.com/apache/incubator-superset/blob/1ea4521d0c116d96b51749613347279669529dd0/superset/connectors/sqla/models.py#L188

Its similar to https://github.com/apache/incubator-superset/pull/3583/files, so perhaps a fix could be included in that PR too?

Thanks, great project by the way!

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 27 (8 by maintainers)

Commits related to this issue

Most upvoted comments

I am using 0.25.6 . This still seems to be an issue. screen shot 2018-07-02 at 2 35 46 pm I tried adding another nyc_data_external from a different database customer_data, which also happens to have nyc_data_external table. The error was still thrown, @mistercrunch

I just can’( believe it’s not possible to have two databases with tables having the same name??!! I must be missing something … am I ?

I am using 0.25.6 . This still seems to be an issue. screen shot 2018-07-02 at 2 35 46 pm I tried adding another nyc_data_external from a different database customer_data, which also happens to have nyc_data_external table. The error was still thrown, @mistercrunch

@SanjayJosh It seems there’s no new issue about the regression? Or did you just found it’s gone?

Oh, just tested 0.24.0 and seem it’s working, so maybe someone should close this issue?

Still seeing the same issue in 1.0.0

I just hit the same issue, with the default sqlite metadata source. Fixed it in sqlite3 with

$ sqlite3 ~/.superset/superset.db
CREATE TABLE "tables2" (
⋮ 
        UNIQUE (table_name, database_id),
⋮ 
;
insert into tables2 select * from tables;
drop table tables;
alter table tables2 rename to tables;

Seems like it isn’t fixed in the latest stable version, which just needs UNIQUE (table_name), changed to UNIQUE (table_name, database_id),.

$ superset version
Superset 0.37.2

Yes it works in combination with modifing this line in SqlaTable class __table_args__ = ( UniqueConstraint("database_id", "schema", "table_name"),)

I found that this problem still exists when using mysql, because the “table_name” unique index created in the “tables” table only contains “table_name” but not “database_id”, and after adding “database_id” to the unique index, the table can be created normally.

Oh, just tested 0.24.0 and seem it’s working, so maybe someone should close this issue?