django-db-constraints icon indicating copy to clipboard operation
django-db-constraints copied to clipboard

Renaming a field can cause issues with reverting migration

Open rrauenza opened this issue 5 years ago • 0 comments

I've found an issue with renaming a field that has an existing constraint.

I think this is because the DROP/ADD of the constraint due to the rename is done before the column is renamed in the reverse migration.

Here's the undo plan that fails with a django.db.utils.ProgrammingError: column "required_run_rate_threshold" does not exist

BEGIN;
--
-- AlterConstraints: ((), {'db_constraints': {u'required_run_rate_low_threshold_less_than_equal_1.0': u'check ("required_run_rate_low_threshold" <= 1.0)', u'required_run_rate_low_threshold_greater_than_equal_0.0': u'check ("required_run_rate_low_threshold" >= 0.0)', u'default_sort_by_in_start_time_run_id_attribute': u'check ("default_sort_by" in (\'start_time\',\'run_id\',\'attribute\'))', u'name_regex_AZazAZaz09': u'check ("name" ~ \'^[A-Za-z][A-Za-z0-9._-]*$\')', u'limit_sort_by': u'check (("default_sort_by" != \'attribute\') OR ("default_sort_attribute_definition_id" IS NOT NULL))', u'composite_fk_default_baseline_id_id': u'foreign key ("default_baseline_id", "id") references dashboards_baseline("id", "dashboard_id")'}, 'name': u'dashboard'})
--
ALTER TABLE "dashboards_dashboard" DROP CONSTRAINT IF EXISTS "required_run_rate_low_threshold_greater_than_equal_0.0", DROP CONSTRAINT IF EXISTS "required_run_rate_low_threshold_less_than_equal_1.0", ADD CONSTRAINT "required_run_rate_threshold_less_than_equal_1.0" check ("required_run_rate_threshold" <= 1.0), ADD CONSTRAINT "required_run_rate_threshold_greater_than_equal_0.0" check ("required_run_rate_threshold" >= 0.0);
--
-- AlterConstraints: ((), {'db_constraints': {u'composite_fk_report_id_dashboard_id': u'foreign key ("report_id", "dashboard_id") references dashboards_emailreport("id", "dashboard_id")'}, 'name': u'EmailReportRunRateLow'})
--
ALTER TABLE "dashboards_emailreportrunratelow" DROP CONSTRAINT IF EXISTS "composite_fk_report_id_dashboard_id";
--
-- AlterConstraints: ((), {'db_constraints': {u'composite_fk_report_id_dashboard_id': u'foreign key ("report_id", "dashboard_id") references dashboards_emailreport("id", "dashboard_id")', u'composite_fk_testdetail_id_dashboard_id': u'foreign key ("testdetail_id", "dashboard_id") references dashboards_testdetail("id", "dashboard_id")'}, 'name': u'EmailReportRegression'})
--
ALTER TABLE "dashboards_emailreportregression" DROP CONSTRAINT IF EXISTS "composite_fk_report_id_dashboard_id", DROP CONSTRAINT IF EXISTS "composite_fk_testdetail_id_dashboard_id";
--
-- AlterConstraints: ((), {'db_constraints': {u'composite_fk_report_id_dashboard_id': u'foreign key ("report_id", "dashboard_id") references dashboards_emailreport("id", "dashboard_id")', u'composite_fk_testdetail_id_dashboard_id': u'foreign key ("testdetail_id", "dashboard_id") references dashboards_testdetail("id", "dashboard_id")'}, 'name': u'EmailReportFailure'})
--
ALTER TABLE "dashboards_emailreportfailure" DROP CONSTRAINT IF EXISTS "composite_fk_report_id_dashboard_id", DROP CONSTRAINT IF EXISTS "composite_fk_testdetail_id_dashboard_id";
--
-- Alter unique_together for emailreport (1 constraint(s))
--
ALTER TABLE "dashboards_emailreport" DROP CONSTRAINT "dashboards_emailreport_dashboard_id_id_dbb114ed_uniq";
--
-- Add field emails to emailreport
--
DROP TABLE "dashboards_emailreport_emails" CASCADE;
--
-- Add field dashboard to emailreport
--
SET CONSTRAINTS "dashboards_emailrepo_dashboard_id_3643756b_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreport" DROP CONSTRAINT "dashboards_emailrepo_dashboard_id_3643756b_fk_dashboard";
ALTER TABLE "dashboards_emailreport" DROP COLUMN "dashboard_id" CASCADE;
--
-- Add field testdetail to emailreportfailure
--
SET CONSTRAINTS "dashboards_emailrepo_testdetail_id_97e2e395_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportfailure" DROP CONSTRAINT "dashboards_emailrepo_testdetail_id_97e2e395_fk_dashboard";
ALTER TABLE "dashboards_emailreportfailure" DROP COLUMN "testdetail_id" CASCADE;
--
-- Add field report to emailreportfailure
--
SET CONSTRAINTS "dashboards_emailrepo_report_id_157aa0f9_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportfailure" DROP CONSTRAINT "dashboards_emailrepo_report_id_157aa0f9_fk_dashboard";
ALTER TABLE "dashboards_emailreportfailure" DROP COLUMN "report_id" CASCADE;
--
-- Add field dashboard to emailreportfailure
--
SET CONSTRAINTS "dashboards_emailrepo_dashboard_id_94848291_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportfailure" DROP CONSTRAINT "dashboards_emailrepo_dashboard_id_94848291_fk_dashboard";
ALTER TABLE "dashboards_emailreportfailure" DROP COLUMN "dashboard_id" CASCADE;
--
-- Add field testdetail to emailreportregression
--
SET CONSTRAINTS "dashboards_emailrepo_testdetail_id_919de741_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportregression" DROP CONSTRAINT "dashboards_emailrepo_testdetail_id_919de741_fk_dashboard";
ALTER TABLE "dashboards_emailreportregression" DROP COLUMN "testdetail_id" CASCADE;
--
-- Add field report to emailreportregression
--
SET CONSTRAINTS "dashboards_emailrepo_report_id_c15641e7_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportregression" DROP CONSTRAINT "dashboards_emailrepo_report_id_c15641e7_fk_dashboard";
ALTER TABLE "dashboards_emailreportregression" DROP COLUMN "report_id" CASCADE;
--
-- Add field dashboard to emailreportregression
--
SET CONSTRAINTS "dashboards_emailrepo_dashboard_id_c265f31b_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportregression" DROP CONSTRAINT "dashboards_emailrepo_dashboard_id_c265f31b_fk_dashboard";
ALTER TABLE "dashboards_emailreportregression" DROP COLUMN "dashboard_id" CASCADE;
--
-- Add field report to emailreportrunratelow
--
SET CONSTRAINTS "dashboards_emailrepo_report_id_044da611_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportrunratelow" DROP CONSTRAINT "dashboards_emailrepo_report_id_044da611_fk_dashboard";
ALTER TABLE "dashboards_emailreportrunratelow" DROP COLUMN "report_id" CASCADE;
--
-- Add field dashboard to emailreportrunratelow
--
SET CONSTRAINTS "dashboards_emailrepo_dashboard_id_368945bb_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportrunratelow" DROP CONSTRAINT "dashboards_emailrepo_dashboard_id_368945bb_fk_dashboard";
ALTER TABLE "dashboards_emailreportrunratelow" DROP COLUMN "dashboard_id" CASCADE;
--
-- Add field dashboard to emailreportstatus
--
SET CONSTRAINTS "dashboards_emailrepo_dashboard_id_03d97c37_fk_dashboard" IMMEDIATE; ALTER TABLE "dashboards_emailreportstatus" DROP CONSTRAINT "dashboards_emailrepo_dashboard_id_03d97c37_fk_dashboard";
ALTER TABLE "dashboards_emailreportstatus" DROP COLUMN "dashboard_id" CASCADE;
--
-- Remove field tracking_window from dashboard
--
ALTER TABLE "dashboards_dashboard" ADD COLUMN "tracking_window" integer DEFAULT 90 NULL CHECK ("tracking_window" >= 0);
ALTER TABLE "dashboards_dashboard" ALTER COLUMN "tracking_window" DROP DEFAULT;
--
-- Rename field required_sequence_threshold on runratetracking to required_threshold
--
ALTER TABLE "dashboards_runratetracking" RENAME COLUMN "required_threshold" TO "required_sequence_threshold";
--
-- Rename field required_sequence_length on runratetracking to required_length
--
ALTER TABLE "dashboards_runratetracking" RENAME COLUMN "required_length" TO "required_sequence_length";
--
-- Rename field required_sequence_length on regressiontracking to required_length
--
ALTER TABLE "dashboards_regressiontracking" RENAME COLUMN "required_length" TO "required_sequence_length";
--
-- Rename field required_sequence_length on failuretracking to required_length
--
ALTER TABLE "dashboards_failuretracking" RENAME COLUMN "required_length" TO "required_sequence_length";
--
-- Rename field required_run_rate_threshold on dashboard to required_run_rate_low_threshold
--
ALTER TABLE "dashboards_dashboard" RENAME COLUMN "required_run_rate_low_threshold" TO "required_run_rate_threshold";
--
-- Rename field required_run_rate_sequence_length on dashboard to required_run_rate_low_length
--
ALTER TABLE "dashboards_dashboard" DROP CONSTRAINT "dashboards_dashboard_required_run_rate_low_l_5cce3dd5_check";
ALTER TABLE "dashboards_dashboard" RENAME COLUMN "required_run_rate_low_length" TO "required_run_rate_sequence_length";
ALTER TABLE "dashboards_dashboard" ADD CONSTRAINT "dashboards_dashboard_required_run_rate_seque_056614df_check" CHECK ("required_run_rate_sequence_length" >= 0);
--
-- Rename field required_regression_sequence_length on dashboard to required_regression_length
--
ALTER TABLE "dashboards_dashboard" DROP CONSTRAINT "dashboards_dashboard_required_regression_length_cead9b54_check";
ALTER TABLE "dashboards_dashboard" RENAME COLUMN "required_regression_length" TO "required_regression_sequence_length";
ALTER TABLE "dashboards_dashboard" ADD CONSTRAINT "dashboards_dashboard_required_regression_seq_b939a173_check" CHECK ("required_regression_sequence_length" >= 0);
--
-- Rename field required_failure_sequence_length on dashboard to required_failure_length
--
ALTER TABLE "dashboards_dashboard" DROP CONSTRAINT "dashboards_dashboard_required_failure_length_b6f81fea_check";
ALTER TABLE "dashboards_dashboard" RENAME COLUMN "required_failure_length" TO "required_failure_sequence_length";
ALTER TABLE "dashboards_dashboard" ADD CONSTRAINT "dashboards_dashboard_required_failure_sequen_c7a76039_check" CHECK ("required_failure_sequence_length" >= 0);
--
-- Create model EmailReportStatus
--
DROP TABLE "dashboards_emailreportstatus" CASCADE;
--
-- Create model EmailReportRunRateLow
--
DROP TABLE "dashboards_emailreportrunratelow" CASCADE;
--
-- Create model EmailReportRegression
--
DROP TABLE "dashboards_emailreportregression" CASCADE;
--
-- Create model EmailReportFailure
--
DROP TABLE "dashboards_emailreportfailure" CASCADE;
--
-- Create model EmailReport
--
DROP TABLE "dashboards_emailreport" CASCADE;
COMMIT;

rrauenza avatar Aug 22 '19 18:08 rrauenza