]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Dialect option `postgresql_concurrently` to `Index` construct.
authorIuri de Silvio <iurisilvio@gmail.com>
Thu, 26 Feb 2015 00:05:31 +0000 (21:05 -0300)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 10 Mar 2015 19:06:14 +0000 (15:06 -0400)
(cherry picked from commit 955576fcf6e7aff7fe924ec3b33bb6d243ddd312)

lib/sqlalchemy/dialects/postgresql/base.py
test/dialect/postgresql/test_compiler.py

index 36df5c05ae84220913ed489f42028f125463b678..397b2205b4953946b7efb2473c88046eae738421 100644 (file)
@@ -1381,7 +1381,13 @@ class PGDDLCompiler(compiler.DDLCompiler):
         text = "CREATE "
         if index.unique:
             text += "UNIQUE "
-        text += "INDEX %s ON %s " % (
+        text += "INDEX "
+
+        concurrently = index.dialect_options['postgresql']['concurrently']
+        if concurrently:
+            text += "CONCURRENTLY "
+
+        text += "%s ON %s " % (
             self._prepared_index_name(index,
                                       include_schema=False),
             preparer.format_table(index.table)
@@ -1671,7 +1677,8 @@ class PGDialect(default.DefaultDialect):
         (schema.Index, {
             "using": False,
             "where": None,
-            "ops": {}
+            "ops": {},
+            "concurrently": False,
         }),
         (schema.Table, {
             "ignore_search_path": False
index 4325f292b0dcffeff1bdc59521c56123493e9ae8..14b4d9068bea78fb6515f39e8f2808ca1ff62ab1 100644 (file)
@@ -305,6 +305,16 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
             "CREATE INDEX test_idx1 ON testtbl ((data + 5))"
         )
 
+    def test_create_index_concurrently(self):
+        m = MetaData()
+        tbl = Table('testtbl', m, Column('data', Integer))
+
+        idx1 = Index('test_idx1', tbl.c.data, postgresql_concurrently=True)
+        self.assert_compile(
+            schema.CreateIndex(idx1),
+            "CREATE INDEX CONCURRENTLY test_idx1 ON testtbl (data)"
+        )
+
     def test_exclude_constraint_min(self):
         m = MetaData()
         tbl = Table('testtbl', m,