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

Développement SQL Server Discussion :

De PostGre vers 2008 [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut De PostGre vers 2008
    Bonjour

    On me demande de migrer une base PostGre vers SQL Server.
    Dans le script PostGre, une ligne de création d'index utilise la fonction COALESCE dans la définitions de colonnes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE UNIQUE INDEX matable_ak ON matable (col_id, (COALESCE(matable_ref_lia, ' '));
    Je ne vois pas trop comment faire passer ça sous SQL Server.

    Une idée svp ??

    Papy !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    il serait intéressant de voir l'utilité de cet index, et les requêtes qu'il supporte.

    Mais de façon générique, vous pouvez ajouter une colonne calculée persistante à la table, et l'utiliser pour créer l'index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ALTER TABLE MaTable
    	ADD  ColonneIndexee AS COALESCE(matable_ref_lia, ' ') PERSISTED
    GO
     
    CREATE UNIQUE INDEX matable_ak ON MaTable (col_id, ColonneIndexee);
    GO

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Concernant l'utilité de l'index, n'ayant pas encore étudié le code qui l'utilise, je n'en ai aucune idée pour le moment.
    J'ai juste constaté que le script de génération de base ajoute ces COALESCE à toutes les définitions de création d'index unique.
    Pour cette migration, j'essaye juste de coller au plus près de PostGreSQL.

    Merci pour cette première solution que je vais étudier tout de suite.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je vous posais la question concernant sont utilité pour la raison suivante :
    Il s'agit d'un index unique, il a donc peut être surtout un rôle de contrainte d'unicité (pour assurer l'unicité du couple [col_id, matable_ref_lia]).
    Dans ce cadre, Postgres autorisera de multiple lignes ayant un NULL pour l'une de ces deux colonnes : par exemple, le couple [123, NULL] pourra être inséré plusieurs fois. C'est peut-être l'unique but de ce COALESCE dans l'index : empêcher cela.

    Cependant, SQL Server ne respecte pas le norme sur ce point, et interdira l'insertion multiple même en cas de présence de NULL.

    Donc, si votre index unique n'a pour but que d'assurer l'unicité en "tenant compte de NULL", alors vous pouvez simplement créer votre index sans le COALESCE.

    En revanche, si votre index vient en support d'une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ...
    FROM ...
    WHERE col_id = xxx
    AND COALESCE(matable_ref_lia, ' ') = 'yyy'
    Alors il vaut mieux créer la colonne calculée.

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Je vais me renseigner au près du client pour voir s'il peut me donner un complément d'information sur l'utilisation de ces index.

    Toujours dans le cadre de cette migration, la base Postgre utilise des séquences. La base cible SQL Server est en 2008 et les séquences n'existant pas dans cette version, ai-je raison d'envisager d'utiliser des colonnes IDENTITY en remplacement ?

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    oui, vous pouvez utilisez les colonnes IDENTITY

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Ok merci !

    Je laisse ouvert au cas où d'autres questionnements surgissent dans la journée :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compatibilité Postgres + Windows 2008 Server x64
    Par ilalaina dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/10/2008, 19h00
  2. erreur de link au passage de visual studio 2005 vers 2008
    Par blueLight dans le forum Visual C++
    Réponses: 2
    Dernier message: 21/04/2008, 15h02
  3. beryl compiz fusion : mandriva 2007.1 vers 2008
    Par cmarsc dans le forum Mandriva / Mageia
    Réponses: 0
    Dernier message: 15/11/2007, 09h01
  4. [Debutante] migration postgre vers oracle to_char
    Par lilou77 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/03/2007, 07h16
  5. Convertir dump postgres vers mysql
    Par )3lade dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 03/10/2005, 16h51

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