首页
随机页面
分类
查看“Django/docs/3.2.x/ref/contrib/postgres/operations”的源代码
来自菜鸟教程
Django/docs/3.2.x/ref/contrib/postgres/operations / ←
数据库迁移操作 — Django 文档
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:数据库迁移操作}} <div id="database-migration-operations" class="section"> = 数据库迁移操作 = 所有这些 [[../../../migration-operations|操作]] 都可以从 <code>django.contrib.postgres.operations</code> 模块获得。 <div id="creating-extension-using-migrations" class="section"> <span id="create-postgresql-extensions"></span> == 使用迁移创建扩展 == 您可以使用迁移文件在数据库中创建 PostgreSQL 扩展。 此示例创建了一个 hstore 扩展,但相同的原则适用于其他扩展。 通过添加带有 [[#django.contrib.postgres.operations.HStoreExtension|HStoreExtension]] 操作的迁移,在涉及 [[../fields#django.contrib.postgres.fields|HStoreField]] 的第一个 <code>CreateModel</code> 或 <code>AddField</code> 操作之前在 PostgreSQL 中设置 hstore 扩展。 例如: <div class="highlight-default notranslate"> <div class="highlight"> <syntaxhighlight lang="python">from django.contrib.postgres.operations import HStoreExtension class Migration(migrations.Migration): ... operations = [ HStoreExtension(), ... ]</syntaxhighlight> </div> </div> 如果扩展已经存在,操作会跳过添加扩展。 对于大多数扩展,这需要具有超级用户权限的数据库用户。 如果 Django 数据库用户没有适当的权限,则必须在 Django 迁移之外使用拥有权限的用户创建扩展。 在这种情况下,连接到您的 Django 数据库并运行查询 <code>CREATE EXTENSION IF NOT EXISTS hstore;</code>。 <div class="versionchanged"> <span class="versionmodified changed"> 3.2 版更改: </span> 在旧版本中,不检查扩展的预先存在。 </div> </div> <div id="createextension" class="section"> == CreateExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">CreateExtension</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">name</span></span>''<span class="sig-paren">)</span> : 安装 PostgreSQL 扩展的 <code>Operation</code> 子类。 对于常见扩展,请使用以下更具体的子类之一。 ;; <span class="sig-name descname"><span class="pre">name</span></span> ;: 这是一个必需的参数。 要安装的扩展名。 </div> <div id="bloomextension" class="section"> == BloomExtension == <dl> <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BloomExtension</span></span></dt> <dd><div class="versionadded"> <p><span class="versionmodified added">3.1 版中的新功能。</span></p> </div> <p>安装 <code>bloom</code> 扩展。</p></dd></dl> </div> <div id="btreeginextension" class="section"> == BtreeGinExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BtreeGinExtension</span></span> : 安装 <code>btree_gin</code> 扩展。 </div> <div id="btreegistextension" class="section"> == BtreeGistExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BtreeGistExtension</span></span> : 安装 <code>btree_gist</code> 扩展。 </div> <div id="citextextension" class="section"> == CITextExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">CITextExtension</span></span> : 安装 <code>citext</code> 扩展。 </div> <div id="cryptoextension" class="section"> == CryptoExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">CryptoExtension</span></span> : 安装 <code>pgcrypto</code> 扩展。 </div> <div id="hstoreextension" class="section"> == HStoreExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">HStoreExtension</span></span> : 安装 <code>hstore</code> 扩展并设置连接以解释 hstore 数据,以便在后续迁移中可能使用。 </div> <div id="trigramextension" class="section"> == TrigramExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">TrigramExtension</span></span> : 安装 <code>pg_trgm</code> 扩展。 </div> <div id="unaccentextension" class="section"> == UnaccentExtension == ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">UnaccentExtension</span></span> : 安装 <code>unaccent</code> 扩展。 </div> <div id="managing-collations-using-migrations" class="section"> <span id="manage-postgresql-collations"></span> == 使用迁移管理排序规则 == <div class="versionadded"> <span class="versionmodified added">3.2 版中的新功能。</span> </div> 如果您需要使用操作系统提供但 PostgreSQL 没有的特定排序规则来过滤或排序列,则可以使用迁移文件管理数据库中的排序规则。 然后,这些排序规则可以与 [[../../../models/fields#django.db.models|CharField]]、[[../../../models/fields#django.db.models|TextField]] 及其子类上的 <code>db_collation</code> 参数一起使用。 例如,要为德国电话簿订购创建排序规则: <div class="highlight-default notranslate"> <div class="highlight"> <syntaxhighlight lang="python">from django.contrib.postgres.operations import CreateCollation class Migration(migrations.Migration): ... operations = [ CreateCollation( 'german_phonebook', provider='icu', locale='und-u-ks-level2', ), ... ]</syntaxhighlight> </div> </div> <dl> <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">CreateCollation</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">name</span></span>'', ''<span class="n"><span class="pre">locale</span></span>'', ''<span class="o"><span class="pre">*</span></span>'', ''<span class="n"><span class="pre">provider</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'libc'</span></span>'', ''<span class="n"><span class="pre">deterministic</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span>''<span class="sig-paren">)</span></dt> <dd><p>使用给定的 <code>name</code>、<code>locale</code> 和 <code>provider</code> 创建排序规则。</p> <p>将 <code>deterministic</code> 参数设置为 <code>False</code> 以创建非确定性排序规则,例如不区分大小写的过滤。</p></dd></dl> <dl> <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">RemoveCollation</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">name</span></span>'', ''<span class="n"><span class="pre">locale</span></span>'', ''<span class="o"><span class="pre">*</span></span>'', ''<span class="n"><span class="pre">provider</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'libc'</span></span>'', ''<span class="n"><span class="pre">deterministic</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span>''<span class="sig-paren">)</span></dt> <dd><p>删除名为 <code>name</code> 的排序规则。</p> <p>当相反时,这是使用提供的 <code>locale</code>、<code>provider</code> 和 <code>deterministic</code> 参数创建排序规则。 因此,需要 <code>locale</code> 使该操作可逆。</p></dd></dl> <div class="admonition-restrictions admonition"> 限制 PostgreSQL 9.6 仅支持 [X33X] 提供程序。 非确定性排序规则仅在 PostgreSQL 12+ 上受支持。 </div> </div> <div id="concurrent-index-operations" class="section"> == 并发索引操作 == PostgreSQL 支持 <code>CREATE INDEX</code> 和 <code>DROP INDEX</code> 语句的 <code>CONCURRENTLY</code> 选项来添加和删除索引而不锁定写入。 此选项对于在实时生产数据库中添加或删除索引很有用。 ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">AddIndexConcurrently</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">model_name</span></span>'', ''<span class="n"><span class="pre">index</span></span>''<span class="sig-paren">)</span> : 类似于 [[../../../migration-operations#django.db.migrations.operations|AddIndex]],但使用 <code>CONCURRENTLY</code> 选项创建索引。 使用此选项时需要注意一些注意事项,请参阅 [https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY 并发构建索引的 PostgreSQL 文档] 。 ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">RemoveIndexConcurrently</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">model_name</span></span>'', ''<span class="n"><span class="pre">name</span></span>''<span class="sig-paren">)</span> : 类似于 [[../../../migration-operations#django.db.migrations.operations|RemoveIndex]],但使用 <code>CONCURRENTLY</code> 选项删除索引。 使用此选项时需要注意一些注意事项,请参阅 [https://www.postgresql.org/docs/current/sql-dropindex.html PostgreSQL 文档] 。 <div class="admonition note"> 笔记 事务内部不支持 <code>CONCURRENTLY</code> 选项(请参阅 [[../../../../howto/writing-migrations#non-atomic-migrations|非原子迁移]] )。 </div> </div> </div> <div class="clearer"> </div> [[Category:django 3.2.x 文档]]
返回至“
数据库迁移操作 — Django 文档
”。