Skip to content

Fix the wrong foreign key on columns.column_name #466

Description

@x4base

In the commit c2bb49f, the foreign key that references datasource.datasource_name was set on columns.column_name when it should be columns.datasource_name. This causes errors when there are any new columns to be created when refreshing the druid datasources.

I am trying to generate a migration script to fix this. However, op.drop_constraint() requires the name of the foreign key you want to drop.
The following code works on SQLite because the foreign keys don't have any names:

naming_convention = {
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
}

def upgrade():
    with op.batch_alter_table('columns', schema=None, naming_convention=naming_convention) as batch_op:
        fk_name = 'fk_columns_column_name_datasources'
        batch_op.drop_constraint(fk_name, type_='foreignkey')
        batch_op.create_foreign_key(fk_name, 'datasources',
                                    ['datasource_name'], ['datasource_name'])

But for MySQL, the foreign keys are named like "columns_ibfk_1". Should I presume that on every machines, this foreign key has the same name and just drop the foreign key named columns_ibfk_1?
Do you have any suggestion about how to write a universal migration script that works on every SQL dialects? Or should I iterate through the known default names in different dialects in try-catch blocks?
I just couldn't figure out a way to drop the foreign key without knowing its name.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions