Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2005, 10h50   #1
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 128
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 128
Points : 28
Points : 28
Par défaut Autre probleme d'insert

Salut

Comment faire contre le probleme d'insertion simultané ?
2 personnes insert en même temps et la patatra c'est la catastrophes

Donc mon prog je selectionne le max de la tables, j'ajoute 1 et ensuite j'insère...
du coup, le probleme semble logique...

que faire ?
- serial ?
- transactions ?

merci d'avance
le_ben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 11h12   #2
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 128
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 128
Points : 28
Points : 28
je regarde du coté desz verrous (lock)
quelqu'un peut il m'en dire plus la dessus ?
le_ben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 11h22   #3
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Si c'est un entier, le top est de prendre un type serial, c'est prevu pour, sinon met tes requetes en transaction
:
begin
insert ....;
commit;
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 11h37   #4
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 128
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 128
Points : 28
Points : 28
la transaction simple ne suffit pas et pour le serial, ce n'est pas une suite d'entier (il y a des conditions)

Code :
1
2
3
4
5
6
BEGIN WORK;
LOCK TABLE aa IN EXCLUSIVE MODE;
SELECT id FROM a 
    WHERE ....
INSERT INTO a VALUES ...
COMMIT WORK;
ça, ça à l'air de marcher après plusieurs test, mais comment en être sur
Si j'ai bien compris, un verrou est posé et les autre attendent leur tour... puis une fois le verrou déposé, le premier le reprend etc...

est ce ça ?
le_ben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2005, 23h22   #5
Membre du Club
 
Homme
Consultant en Business Intelligence
Inscription : mai 2005
Messages : 34
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2005
Messages : 34
Points : 41
Points : 41
Envoyer un message via MSN à soufir
Salut,
Pour ma part , j'utilise les sequences, une sequence c'est une sorte de fonction qui te retourne un numero incrementer ceci pour eviter les utilisation des max:
Code :
SELECT max(macolonne) FROM matable
tu creer d'abord une sequence


Code :
1
2
3
4
5
6
7
 
  CREATE SEQUENCE masequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
Chaque fois qu'on apelle cette sequence sa valeur sera mis a jour et là il n'aura plus de
Citation:
patatra c'est la catastrophes
ensuite quan tu insert un nouvel enregistrement
tu tape:

Code :
 SELECT (NEXTVAL('masequence')) FROM matable
Sinon si tu as plusieurs insertion tu recuperes dans une variable la valeur de ta sequence grace à
Code :
SELECT (NEXTVAL('masequence'))
et ensuite cette variable tu peu les utiliser pour les clé etrangeres

Je ne sais pas si j'ai été claire par contre regarde cette article
http://dgriessinger.developpez.com/p...sql/sequences/
soufir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2005, 09h21   #6
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Peux tu nous donner un exemple de generation ? l'algo ?
j'ai peut etre une piste : sequence + procedure stockée
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2005, 16h18   #7
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 128
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 128
Points : 28
Points : 28
merci pour vos réponses mais ma solution fonctionne niquel (ouf )
je vais donc la garder mais à l'avenir je pense que je regarderai plutot du coté de vos solutions, car les verrous c'est un peu le bordel et ça peut vite provoquer des inter blocages.

merci encore
le_ben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h01.


 
 
 
 
Partenaires

Hébergement Web