Add Postgresql warning when using DROP INDEX without CONCURRENTLY keyword

This commit is contained in:
David Wobrock committed 2021-06-19 18:15:40 +02:00
1 parent 70db245df3
commit 2bf87c0659
2 files changed
+20 -3

No files matched your search

@@ -13,4 +13,11 @@ class PostgresqlAnalyser(BaseAnalyser):
"mode": "one_liner",
"type": "warning",
},
{
"code": "DROP_INDEX",
"fn": lambda sql, **kw: re.search("DROP INDEX", sql) and not re.search("INDEX CONCURRENTLY", sql),
"msg": "DROP INDEX locks table",
"mode": "one_liner",
"type": "warning",
},
]
+13 -3
View File
@@ -13,9 +13,11 @@ class SqlAnalyserTestCase(unittest.TestCase):
sql_statements=sql, database_vendor=self.database_vendor
)
def assertValidSql(self, sql):
errors, _, _ = self.analyse_sql(sql)
def assertValidSql(self, sql, allow_warnings=False):
errors, _, warnings = self.analyse_sql(sql)
self.assertEqual(0, len(errors), "Found errors in sql: {}".format(errors))
if not allow_warnings:
self.assertEqual(0, len(warnings), "Found warnings in sql: {}".format(errors))
def assertBackwardIncompatibleSql(self, sql):
errors, _, _ = self.analyse_sql(sql)
@@ -187,7 +189,7 @@ class PostgresqlAnalyserTestCase(SqlAnalyserTestCase):
'CREATE INDEX "app_add_manytomany_field_b_many_to_many_b_id_953b185b" ON "app_add_manytomany_field_b_many_to_many"("b_id");',
'CREATE INDEX "app_add_manytomany_field_b_many_to_many_a_id_4b44832a" ON "app_add_manytomany_field_b_many_to_many"("a_id");',
]
self.assertValidSql(sql)
self.assertValidSql(sql, allow_warnings=True)
def test_make_column_not_null_with_django_default(self):
sql = [
@@ -219,3 +221,11 @@ class PostgresqlAnalyserTestCase(SqlAnalyserTestCase):
self.assertValidSql(sql)
sql = "CREATE UNIQUE INDEX CONCURRENTLY title_idx ON films (title);"
self.assertValidSql(sql)
def test_drop_index_non_concurrently(self):
sql = "DROP INDEX ON films"
self.assertWarningSql(sql)
def test_drop_index_concurrently(self):
sql = "DROP INDEX CONCURRENTLY ON films;"
self.assertValidSql(sql)