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 :

Comment enlever le verrou sur une colonne ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Comment enlever le verrou sur une colonne ?
    bonjours à tous
    quelqu'un peut il m'aider svp avec mon problème
    j'ai réalisé une fonction qui modifie(update) la valeur d'une colonne selon une boucle (loop).mon problème est que quand je fait un Select sur cette colonne( au moment d’exécution de la boucle) la requette attends la fin de la boucle et me rend la dernière valeur.or je veut a chaque fois accéder à la valeur instantané de cette colonne .j'ai du comprendre que la boucle met un verou sur cette colonne jusqu'à la fin de la modification.est ce qu'il y a un moyen d'enlever ce verou

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Quelle base de données, quelle version et quel niveau d'isolation ?
    De base sur postgresql, vous ne devriez pas être bloqué.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Quelle base de données, quelle version et quel niveau d'isolation ?
    De base sur postgresql, vous ne devriez pas être bloqué.
    merci tout d'abord pour votre interet:
    donc voila ma base de donnée est spatiale(postgis) ,elle contient 3 colonne (id,chemin(geometry),position(geometry)) j'applique la fonction suivante sur la colonne postion qui est de type geometry
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
       counter INTEGER := 1 ; 
     
    BEGIN
    while counter<11
     loop
      update geo as t1 set position_geom=
    (  SELECT ST_Line_Interpolate_Point (chemin, 
     
    								 (0.27*vitesse_max*3*counter/(select ST_Length(chemin:: geography) ))) from geo as t2,pg_sleep( 10) where t1.id=t2.id); 			
    		 counter := counter + 1 ;
     
     END LOOP ;
    	END ;
    en faite avec cette fonction chaque 10 s on recupere une nouvelle postion sur le chemin qu'on va stocker sur la colonne position .et ce que je cherche est de recuperer cette valeur chaque fois qu'elle est stocker sans attendre la fin de la boucle qui me rend toujours la derniere position
    et merci beaucoups

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Si vous voulez qu'une 2eme session puisse lire des données modifier par une 1ere, il faut que la 1ere valide (commit) ses modifications.
    Ça vous oblige en l'état du script en exemple à faire un commit dans la boucle, ce qui est généralement une mauvaise pratique notamment en terme de perf.
    PG_SLEEP est il présent uniquement à des fins de test ?

    Par contre je ne vois pas pourquoi, en l'état du test, le SELECT serait bloqué, il devrait vous renvoyer les données existantes avant le début d'exécution de la boucle.

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Si vous voulez qu'une 2eme session puisse lire des données modifier par une 1ere, il faut que la 1ere valide (commit) ses modifications.
    Ça vous oblige en l'état du script en exemple à faire un commit dans la boucle, ce qui est généralement une mauvaise pratique notamment en terme de perf.
    PG_SLEEP est il présent uniquement à des fins de test ?

    Par contre je ne vois pas pourquoi, en l'état du test, le SELECT serait bloqué, il devrait vous renvoyer les données existantes avant le début d'exécution de la boucle.
    oui exactement il me renvoi la valeur avant le debut de la boucle .mais ce que je veux c'est toutes les valeurs au moment de la boucle comme ca mon objet qui accede a la colonne position de la table toute les 10s change sa position sur la carte et on aura comme un objet qui se deplace sur la carte .....
    merci encore .

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Seule une isolation "read uncommitted" permet de lire les modifications non validées. Mais du coup l'information récupérée est sans garantie de validité.
    Donc soit vous commitez à chaque boucle pour permettre à l'autre thread de récupérer les valeurs au fil de l'eau, soit vous utilisez une isolation "UR" pour autoriser les "dirty read"

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Le, problème c'est que :
    1) PostgreSQL n'utilise que des fonctions atomiques d'un point de vu transactionnel dans lequel vous ne pouvez pas valider les données tant que vous n'êtes pas sorti de la fonction
    2) PostGreSQL n'implémente pas la lecture sale (DIRTY READ ou READ UNCOMMITTED)

    Pour faire cela, tournez vous vers MS SQL Server qui implémente le même modèle spatial que PostgreSQL :
    https://blog.developpez.com/sqlpro/p...on_geographiqu

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    merci les gas vous m'avez sauvé !!!!!!!!!

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

Discussions similaires

  1. Comment attribuer un ordre sur une colonne dans une table
    Par MangoZaz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/12/2015, 15h38
  2. Comment calculer la moyenne sur une colonne selon un critère
    Par Contact2012 dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/06/2010, 16h07
  3. Réponses: 2
    Dernier message: 12/12/2009, 10h50
  4. [VB.Net/Dataview] Comment gérer un filtre sur une colonne de type date ?
    Par silatchom dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/07/2006, 19h28
  5. Comment supprimer un verrou sur une table ?
    Par Laure13 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/03/2006, 15h10

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