IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Créer un index sur une table partitionnée


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2024
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Créer un index sur une table partitionnée
    Bonjour,

    J'obtiens cette erreur lorsque je veux créer un index sur n'importe quelle colonne d'une table partitionnée.
    J'ai fait le test sur une table avec un partitionnement BY LIST et sur une avec partitionnement BY RANGE.

    Pour résumer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE  TABLE T1 (
    	id            numeric  NOT NULL  ,
    	status      varchar(255)  NOT NULL
    )
    	PARTITION BY LIST (STATUS) ;
     
    CREATE UNIQUE INDEX  IDX1 ON T1 (id) ;
    ERROR: cannot create index on partitioned table "T1"
     
    CREATE INDEX  IDX2 ON T1 (status) ;
    ERROR: cannot create index on partitioned table "T1"
    Et pas de code d'erreur...

    Cela marche lorsque je les crée sur des partitions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create table T1_VAL1 PARTITION OF T1 for values in ('VAL1') ;
     
    CREATE UNIQUE INDEX IDX1_VAL1 ON T1 (id) ;
    INDEX IDX1_VAL1 créé(e).
    Mais je ne vais pas gérer chaque index de chaque partition, surtout BY RANGE, alors que c'est censé être créé automatiquement si l'index est défini au niveau de la table chapeau.
    Pourtant la syntaxe est bonne et je n'ai pas trouvé ce type d'erreur sur le net..
    C'est pourtant assez trivial, mais si quelqu'un a une idée... (je suis en 10.23)
    Merci.

  2. #2
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2024
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Dans la doc de Postgres il y a bien ça :

    Create an index on the key column(s), as well as any other indexes you might want, on the partitioned table. (The key index is not strictly necessary, but in most scenarios it is helpful.) This automatically creates a matching index on each partition, and any partitions you create or attach later will also have such an index. An index or unique constraint declared on a partitioned table is “virtual” in the same way that the partitioned table is: the actual data is in child indexes on the individual partition tables.
    Mais j'ai l'impression que la version 10 ne permet pas cette solution de création automatique d'index, mais que c'est seulement à partir d'une version ultérieure (12 ?)

    Dans la doc présente sur le site, la 10 à priori, il y a en effet :

    Créer un index sur la ou les colonnées de la clé, ainsi que tout autre index vous pourriez vouloir pour chaque partition. (L'index sur la clé n'est pas strictement nécessaire, mais c'est utile dans la plupart des scénario. Si vous voulez que les valeurs de la clé soient unique alors vous devriez toujours créer un index unique ou une contrainte de clé primaire pour chaque partition.)

    CREATE INDEX ON measurement_y2006m02 (logdate);
    CREATE INDEX ON measurement_y2006m03 (logdate);
    ...
    CREATE INDEX ON measurement_y2007m11 (logdate);
    CREATE INDEX ON measurement_y2007m12 (logdate);
    CREATE INDEX ON measurement_y2008m01 (logdate);

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Le partitionnement natif dans PostgreSQL est apparu en version 10. Dans cette version, il fallait effectivement créer les index sur chaque partition.
    La création de l'index sur la table partitionnée se déclinant automatiquement sur chaque partition est apparue dans la version 11 : https://docs.postgresql.fr/11/ddl-partitioning.html

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Mise a jour d'un index sur une table de 22 colonnes
    Par loupin dans le forum Oracle
    Réponses: 4
    Dernier message: 09/08/2007, 07h26
  2. [SQL 2005 SP1] Pb de plage d'index sur une table répliquée
    Par Peck777 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 28/08/2006, 18h55
  3. Parametrer le nombre d'index sur une table
    Par Invité dans le forum Access
    Réponses: 1
    Dernier message: 17/05/2006, 11h36
  4. MySQL - Probleme avec 2 index sur une table
    Par xG-Hannibal dans le forum Outils
    Réponses: 7
    Dernier message: 31/03/2006, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo