{"title":"Opérations de migration de base de données","version":"5.0","locale":"fr","docname":"ref/contrib/postgres/operations","url":"/fr/5.0/ref/contrib/postgres/operations/","canonical":"https://djangodocs.dev/fr/5.0/ref/contrib/postgres/operations/","summary":"Toutes ces opérations sont disponibles dans le module django.contrib.postgres.operations . Création d’extension à l’aide des migrations Lien vers cette rubrique #…","html":"<h1>Opérations de migration de base de données<a class=\"heading-anchor\" href=\"#database-migration-operations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Toutes ces <a class=\"reference internal\" href=\"/fr/5.0/ref/migration-operations/\"><span class=\"doc\">opérations</span></a> sont disponibles dans le module <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>Création d’extension à l’aide des migrations<a class=\"heading-anchor\" href=\"#creating-extension-using-migrations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il est possible de créer une extension de base de données PostgreSQL en utilisant un fichier de migration. Cet exemple crée une extension hstore, mais le même principe est applicable aux autres extensions.</p>\n<p>Configurer l’extension hstore dans PostgreSQL avant la première opération <code class=\"docutils literal notranslate\"><span class=\"pre\">CreateModel</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> qui concerne un champ <a class=\"reference internal\" href=\"/fr/5.0/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> en ajoutant une migration comprenant l’opération <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>. Par exemple :</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\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><span class=\"n\">HStoreExtension</span><span class=\"p\">(),</span> <span class=\"o\">...</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>L’opération omet l’ajout de l’extension si celle-ci existe déjà.</p>\n<p>Pour la plupart des extensions, il est nécessaire que l’utilisateur de base de données possède les droits de superutilisateur. Si l’utilisateur de base de données Django ne possède pas les privilèges suffisants, il est alors nécessaire de créer l’extension en dehors des migrations Django avec un utilisateur qui possède ces droits. Dans ce cas, connectez-vous à la base de données et lancez la requête <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une sous-classe d”<code class=\"docutils literal notranslate\"><span class=\"pre\">Operation</span></code> qui installe une extension PostgreSQL. Pour les extensions courantes, utilisez l’une des sous-classes plus spécifiques ci-dessous.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce paramètre est obligatoire. Le nom de l’extension à installer.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <code class=\"docutils literal notranslate\"><span class=\"pre\">hstore</span></code> et configure également la connexion afin d’interpréter les données hstore pour un usage possible dans les migrations suivantes.</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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <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\">Lien vers cette rubrique</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Installe l’extension <code class=\"docutils literal notranslate\"><span class=\"pre\">unaccent</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"managing-collations-using-migrations\">\n<span id=\"manage-postgresql-collations\"></span><h2>Gestion des collations à l’aide des migrations<a class=\"heading-anchor\" href=\"#managing-collations-using-migrations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Si vous avez besoin de filtrer ou de trier une colonne selon une collation particulière fournie par votre système d’exploitation mais pas par PostgreSQL, vous pouvez gérer les collations de votre base de données avec un fichier de migration. Ces collations peuvent ensuite être référencées dans le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">db_collation</span></code> des champs <a class=\"reference internal\" href=\"/fr/5.0/ref/models/fields/#django.db.models.CharField\" title=\"django.db.models.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, <a class=\"reference internal\" href=\"/fr/5.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextField</span></code></a> et de leurs sous-classes.</p>\n<p>Par exemple, pour créer une collation pour le tri des annuaires téléphoniques allemands</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\">CreateCollation</span>\n\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\">CreateCollation</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;case_insensitive&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">provider</span><span class=\"o\">=</span><span class=\"s2\">&quot;icu&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">locale</span><span class=\"o\">=</span><span class=\"s2\">&quot;und-u-ks-level2&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">deterministic</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"p\">),</span>\n        <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.CreateCollation\">\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\">CreateCollation</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">locale</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><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></em>, <em class=\"sig-param\"><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></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.CreateCollation\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Crée une collation avec les paramètres <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">provider</span></code> fournis.</p>\n<p>Définissez le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">deterministic</span></code> à <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> pour créer une collation non déterministe, par exemple pour le filtrage non sensible à la casse.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.RemoveCollation\">\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\">RemoveCollation</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">locale</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><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></em>, <em class=\"sig-param\"><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></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.RemoveCollation\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Enlève les collations nommées <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>.</p>\n<p>Lors de l’inversion de la migration, cette opération crée une collation avec les arguments <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">provider</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">deterministic</span></code> indiqués. C’est pourquoi  <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> est obligatoire pour que l’opération puisse être réversible.</p>\n</dd></dl>\n\n</section>\n<section id=\"concurrent-index-operations\">\n<h2>Opérations d’index concurrentes<a class=\"heading-anchor\" href=\"#concurrent-index-operations\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>PostgreSQL prend en charge l’option <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> pour les instructions <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">INDEX</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">DROP</span> <span class=\"pre\">INDEX</span></code> pour ajouter et supprimer des index sans verrouiller les écritures. Cette option est utile pour l’ajout ou la suppression d’index  dans une base de données active en production.</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Comme <a class=\"reference internal\" href=\"/fr/5.0/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>, mais crée un index avec l’option <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code>. Il existe quelques mises en garde à respecter quand on utilise cette option, lisez <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY\">la documentation PostgreSQL sur la construction concurrente d’index</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\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Comme <a class=\"reference internal\" href=\"/fr/5.0/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>, mais supprime l’index avec l’option <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code>. Il existe quelques mises en garde à respecter quand on utilise cette option, lisez <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-dropindex.html\">la documentation PostgreSQL</a>.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>L’option <code class=\"docutils literal notranslate\"><span class=\"pre\">CONCURRENTLY</span></code> n’est pas prise en charge à l’intérieur d’une transaction (voir <a class=\"reference internal\" href=\"/fr/5.0/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">migrations non atomiques</span></a>).</p>\n</aside>\n</section>\n<section id=\"adding-constraints-without-enforcing-validation\">\n<h2>Ajout de contraintes sans appliquer la validation<a class=\"heading-anchor\" href=\"#adding-constraints-without-enforcing-validation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>PostgreSQL prend en charge l’option <code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span> <span class=\"pre\">VALID</span></code> avec l’instruction <code class=\"docutils literal notranslate\"><span class=\"pre\">ADD</span> <span class=\"pre\">CONSTRAINT</span></code> afin d’ajouter des contraintes d’intégrité sans appliquer leur validation sur les lignes existantes. Cette option est pratique si vous souhaitez éviter le parcours potentiellement long de la table pour vérifier si toutes les lignes existantes respectent la contrainte.</p>\n<p>Pour valider plus tard les contraintes d’intégrité créées avec l’option <code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span> <span class=\"pre\">VALID</span></code>, utilisez l’opération <a class=\"reference internal\" href=\"#django.contrib.postgres.operations.ValidateConstraint\" title=\"django.contrib.postgres.operations.ValidateConstraint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ValidateConstraint</span></code></a>.</p>\n<p>Consultez <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-NOTES\">la documentation PostgreSQL</a> pour plus de détails.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.AddConstraintNotValid\">\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\">AddConstraintNotValid</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\">constraint</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.operations.AddConstraintNotValid\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Comme <a class=\"reference internal\" href=\"/fr/5.0/ref/migration-operations/#django.db.migrations.operations.AddConstraint\" title=\"django.db.migrations.operations.AddConstraint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AddConstraint</span></code></a>, mais évite de valider la contrainte pour les lignes existantes.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.operations.ValidateConstraint\">\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\">ValidateConstraint</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.ValidateConstraint\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Parcours la table et valide la contrainte d’intégrité donnée pour les lignes existantes.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Les opérations <code class=\"docutils literal notranslate\"><span class=\"pre\">AddConstraintNotValid</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidateConstraint</span></code> doivent être appliquées dans deux migrations séparées. Si vous appliquez les deux opérations dans la même migration atomique, l’effet est le même que si vous utilisiez <a class=\"reference internal\" href=\"/fr/5.0/ref/migration-operations/#django.db.migrations.operations.AddConstraint\" title=\"django.db.migrations.operations.AddConstraint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AddConstraint</span></code></a>, alors que si vous les appliquez les deux dans une seule migration non atomique, le risque est de laisser votre base de données dans un état incohérent dans le cas où l’opération <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidateConstraint</span></code> échoue.</p>\n</aside>\n</section>","rootId":"database-migration-operations","toc":[{"title":"Création d’extension à l’aide des migrations","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":"Gestion des collations à l’aide des migrations","anchor":"managing-collations-using-migrations","children":[]},{"title":"Opérations d’index concurrentes","anchor":"concurrent-index-operations","children":[]},{"title":"Ajout de contraintes sans appliquer la validation","anchor":"adding-constraints-without-enforcing-validation","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/5.0/ref/"},{"docname":"ref/contrib/index","title":"Paquets contrib","url":"/fr/5.0/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/fr/5.0/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/lookups","title":"Recherches spécifiques à PostgreSQL","url":"/fr/5.0/ref/contrib/postgres/lookups/"},"next":{"docname":"ref/contrib/postgres/search","title":"Recherche plein texte","url":"/fr/5.0/ref/contrib/postgres/search/"},"formats":{"html":"/fr/5.0/ref/contrib/postgres/operations/","markdown":"/fr/5.0/ref/contrib/postgres/operations.md","json":"/fr/5.0/ref/contrib/postgres/operations.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/postgres/operations.txt","official":"https://docs.djangoproject.com/fr/5.0/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","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}