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

Administration PostgreSQL Discussion :

Colonne générée pour extraire le mois d'une date


Sujet :

Administration PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur Freelance
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Freelance

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut Colonne générée pour extraire le mois d'une date
    Bonjour,

    Lors de la création de ma table la colonne générée "MoisSaisie" ne passe pas, j'ai l'erreur suivante :

    ERROR: l'expression de génération n'est pas immuable

    ERREUR: l'expression de génération n'est pas immuable
    État SQL : 42P17

    Si vous pouvez m'aider, merci d'avance.

    Jean-Michel

    Script de création de ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS public."TPanier1"
    (
        "NoPanier" integer NOT NULL,
        "TypePanier" typepanier NOT NULL,
        "DateSaisie" timestamp with time zone NOT NULL,
        "MoisSaisie" INT GENERATED ALWAYS AS (extract(month FROM "DateSaisie")) STORED,
        CONSTRAINT "TPanier1_pkey" PRIMARY KEY ("NoPanier")
    )
    TABLESPACE pg_default;

  2. #2
    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 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Ça vient notamment du fait que votre colonne "DateSaisie" est de type timestamp avec timezone. Comme la timezone dépend du serveur, le résultat ne peut pas être immuable...
    Pour que ça fonctionne, il faut "forcer" la timezone de la colonne, par exemple à UTC (ou à la timezone de votre serveur), pour convertir en timestamp sans timezone.

    Le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS public."TPanier1"
    (
        "NoPanier" integer NOT NULL,
        "TypePanier" typepanier NOT NULL,
        "DateSaisie" timestamp with time zone NOT NULL,
        "MoisSaisie" INT GENERATED ALWAYS AS (extract(month FROM "DateSaisie" AT TIME ZONE 'UTC')) STORED,
        CONSTRAINT "TPanier1_pkey" PRIMARY KEY ("NoPanier")
    )
    TABLESPACE pg_default;
    Attention ! Vous devez donc définir la timezone qui convient... Ici, j'ai arbitrairement choisi UTC.

    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

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur Freelance
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Freelance

    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    Merci beaucoup, ça marche.

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

Discussions similaires

  1. Extraire le mois d'une date
    Par phal2ip dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/09/2008, 17h39
  2. Extraire le mois d'une date
    Par Qapoka dans le forum Développement
    Réponses: 1
    Dernier message: 19/04/2008, 14h52
  3. Extraire le mois d'une date et connaitre le mois en cours
    Par Whinging dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/04/2008, 20h33
  4. Extraire le mois d'une date
    Par hottnikks_79 dans le forum Access
    Réponses: 3
    Dernier message: 20/07/2006, 21h50
  5. [LG] Extraire le mois dans une date en PASCAL
    Par JPCOCU dans le forum Langage
    Réponses: 1
    Dernier message: 03/10/2005, 15h40

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