{"title":"数据库迁移操作","version":"3.1","locale":"zh-hans","docname":"ref/contrib/postgres/operations","url":"/zh-hans/3.1/ref/contrib/postgres/operations/","canonical":"https://djangodocs.dev/zh-hans/3.1/ref/contrib/postgres/operations/","summary":"所有这些 操作 都可以从 django.contrib.postgres.operations 模块中获得。 使用迁移创建扩展 Link to this heading # 你可以使用迁移文件在数据库中创建一个 PostgreSQL 扩展。这个例子创建了一个 hstore 扩展，但同样的原理也适用于其他扩展。 在涉及到…","html":"<h1>数据库迁移操作<a class=\"heading-anchor\" href=\"#database-migration-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>所有这些 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/migration-operations/\"><span class=\"doc\">操作</span></a> 都可以从 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.postgres.operations</span></code> 模块中获得。</p>\n<section id=\"creating-extension-using-migrations\">\n<span id=\"create-postgresql-extensions\"></span><h2>使用迁移创建扩展<a class=\"heading-anchor\" href=\"#creating-extension-using-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>你可以使用迁移文件在数据库中创建一个 PostgreSQL 扩展。这个例子创建了一个 hstore 扩展，但同样的原理也适用于其他扩展。</p>\n<p>在涉及到 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.HStoreField\" title=\"django.contrib.postgres.fields.HStoreField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HStoreField</span></code></a> 的第一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">CreateModel</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> 操作之前，通过添加 <a class=\"reference internal\" href=\"#django.contrib.postgres.operations.HStoreExtension\" title=\"django.contrib.postgres.operations.HStoreExtension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HStoreExtension</span></code></a> 操作的迁移，在 PostgreSQL 中设置 hstore 扩展。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.postgres.operations</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HStoreExtension</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">HStoreExtension</span><span class=\"p\">(),</span>\n        <span class=\"o\">...</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>对于大多数扩展来说，这需要一个具有超级用户权限的数据库用户。如果 Django 数据库的用户没有相应的权限，你就必须在 Django 迁移之外用一个有权限的用户创建扩展。在这种情况下，连接到你的 Django 数据库，并运行查询 <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">EXTENSION</span> <span class=\"pre\">IF</span> <span class=\"pre\">NOT</span> <span class=\"pre\">EXISTS</span> <span class=\"pre\">hstore;</span></code>。</p>\n</section>\n<section id=\"createextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">CreateExtension</span></code><a class=\"heading-anchor\" href=\"#createextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.CreateExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CreateExtension</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.CreateExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个安装 PostgreSQL 扩展的 <code class=\"docutils literal notranslate\"><span class=\"pre\">Operation</span></code> 子类。对于普通的扩展，请使用下面一个更具体的子类。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.CreateExtension.name\">\n<span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.CreateExtension.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>这是一个必要的参数。要安装的扩展名。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"bloomextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">BloomExtension</span></code><a class=\"heading-anchor\" href=\"#bloomextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.BloomExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BloomExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.BloomExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"3.1\">\n<p class=\"version-note-title\">New in Django 3.1</p></aside>\n<p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">bloom</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"btreeginextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">BtreeGinExtension</span></code><a class=\"heading-anchor\" href=\"#btreeginextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.BtreeGinExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BtreeGinExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.BtreeGinExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">btree_gin</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"btreegistextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">BtreeGistExtension</span></code><a class=\"heading-anchor\" href=\"#btreegistextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.BtreeGistExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BtreeGistExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.BtreeGistExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">btree_gist</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"citextextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">CITextExtension</span></code><a class=\"heading-anchor\" href=\"#citextextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.CITextExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CITextExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.CITextExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">citext</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"cryptoextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">CryptoExtension</span></code><a class=\"heading-anchor\" href=\"#cryptoextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.CryptoExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CryptoExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.CryptoExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">pgcrypto</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"hstoreextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">HStoreExtension</span></code><a class=\"heading-anchor\" href=\"#hstoreextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.HStoreExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">HStoreExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.HStoreExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">hstore</span></code> 扩展，并设置连接来解释 hstore 数据，以便在后续迁移中使用。</p>\n</dd></dl>\n\n</section>\n<section id=\"trigramextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">TrigramExtension</span></code><a class=\"heading-anchor\" href=\"#trigramextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.TrigramExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TrigramExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.TrigramExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">pg_trgm</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"unaccentextension\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">UnaccentExtension</span></code><a class=\"heading-anchor\" href=\"#unaccentextension\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.UnaccentExtension\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UnaccentExtension</span></span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.UnaccentExtension\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>安装 <code class=\"docutils literal notranslate\"><span class=\"pre\">unaccent</span></code> 扩展。</p>\n</dd></dl>\n\n</section>\n<section id=\"concurrent-index-operations\">\n<h2>并发索引操作<a class=\"heading-anchor\" href=\"#concurrent-index-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"3.0\">\n<p class=\"version-note-title\">New in Django 3.0</p></aside>\n<p>PostgreSQL 支持 <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">INDEX</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">DROP</span> <span class=\"pre\">INDEX</span></code> 语句中的 <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> 选项，以增加和删除索引而不锁定写入。这个选项对于在实际生产的数据库中添加或删除索引非常有用。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.AddIndexConcurrently\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AddIndexConcurrently</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">index</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.AddIndexConcurrently\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>就像 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/migration-operations/#django.db.migrations.operations.AddIndex\" title=\"django.db.migrations.operations.AddIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AddIndex</span></code></a> 一样，但是使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> 选项创建索引。这在使用这个选项时有一些注意事项，参见 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY\">PostgreSQL 关于并发建立索引的文档</a> 。</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.RemoveIndexConcurrently\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RemoveIndexConcurrently</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.RemoveIndexConcurrently\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>就像 <a class=\"reference internal\" href=\"/zh-hans/3.1/ref/migration-operations/#django.db.migrations.operations.RemoveIndex\" title=\"django.db.migrations.operations.RemoveIndex\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoveIndex</span></code></a> 一样，但是使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> 选项来删除索引。这在使用这个选项时有一些注意事项，请看 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-dropindex.html\">PostgreSQL 文档</a> 。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>在事务中不支持 <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> 选项（见 <a class=\"reference internal\" href=\"/zh-hans/3.1/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">非原子性迁移</span></a>）。</p>\n</aside>\n</section>","rootId":"database-migration-operations","toc":[{"title":"使用迁移创建扩展","anchor":"creating-extension-using-migrations","children":[]},{"title":"CreateExtension","anchor":"createextension","children":[]},{"title":"BloomExtension","anchor":"bloomextension","children":[]},{"title":"BtreeGinExtension","anchor":"btreeginextension","children":[]},{"title":"BtreeGistExtension","anchor":"btreegistextension","children":[]},{"title":"CITextExtension","anchor":"citextextension","children":[]},{"title":"CryptoExtension","anchor":"cryptoextension","children":[]},{"title":"HStoreExtension","anchor":"hstoreextension","children":[]},{"title":"TrigramExtension","anchor":"trigramextension","children":[]},{"title":"UnaccentExtension","anchor":"unaccentextension","children":[]},{"title":"并发索引操作","anchor":"concurrent-index-operations","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/3.1/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/3.1/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/zh-hans/3.1/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/lookups","title":"PostgreSQL 特有查找","url":"/zh-hans/3.1/ref/contrib/postgres/lookups/"},"next":{"docname":"ref/contrib/postgres/search","title":"全文搜索","url":"/zh-hans/3.1/ref/contrib/postgres/search/"},"formats":{"html":"/zh-hans/3.1/ref/contrib/postgres/operations/","markdown":"/zh-hans/3.1/ref/contrib/postgres/operations.md","json":"/zh-hans/3.1/ref/contrib/postgres/operations.json"},"source":"https://github.com/django/django/blob/stable/3.1.x/docs/ref/contrib/postgres/operations.txt","official":"https://docs.djangoproject.com/zh-hans/3.1/ref/contrib/postgres/operations/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}