Vous n'êtes pas identifié(e).

#1 08/10/2010 17:20:28

cébé
Membre

Table sans OIDS ni clef primaire

Bonjour,
lors d'une opération de maintenance sur une table de mon intranet, j'ai supprimé la clef primaire sur 2 colonnes pour créer ensuite une clef primaire sur 3 colonnes.
Cela car il me fallait ajouter des données dans la troisième colonne et créer des doublons sur l'ancienne clef primaire.
Malheureusement, j'ai effectué cette opération sur une table sans OIDS (j'ai maintenant bien saisi à quoi cela servait...).
Lorsque j'essayais de modifier des données avec pgAdminIII, cela donnait quelques comportements bizarre... puisque le système ne pouvait plus identifier les lignes auxquelles je voulais accéder.

La création de la clef primaire n'est pas possible car j'ai des doublons sur ma table, même en mettant tous les champs dans la clef primaire.

Que puis je faire pour récupérer ma table fonctionnelle ?
Je pratique le SQL sans trop de soucis, mais cela n'étant pas mon activité principale, je ne vois pas comment traiter le problème sad

cébé.

nota : JC,tu es toujours par là ?

Hors ligne

#2 08/10/2010 17:32:14

cébé
Membre

Re : Table sans OIDS ni clef primaire

Petite précision, la base est en v8.3, sur serveur UBUNTU.

merci,
Cébé

Hors ligne

#3 08/10/2010 17:35:42

Marc Cousin
Membre

Re : Table sans OIDS ni clef primaire

Bonjour,

Non, les oids ne sont pas une bonne idée. Ne vous en servez pas.

Ce que vous indiquez n'est qu'une limitation (logique) de pgadmin3, qui n'a plus de moyen unique de localiser vos enregistrements, n'ayant plus de clé primaire.

Si je résume bien, vous avez, dans votre table, quelques enregistrements en doublon (sur l'ensemble des colonnes) ?

Si c'est le cas, et que vous savez lesquels, vous pouvez encore les distinguer par le 'ctid', c'est à dire l'adresse physique de l'enregistrement dans la table.

Voici une démo (avec une seule colonne, je suis paresseux smile )

CREATE TABLE test (a int);
CREATE TABLE
marc=# INSERT INTO test values (1);
INSERT 0 1
marc=# INSERT INTO test values (1);
INSERT 0 1
marc=# SELECT ctid,a from test;
ctid  | a
-------+---                                                                                                                                                               
(0,1) | 1                                                                                                                                                               
(0,2) | 1

DELETE FROM test where ctid='(0,1)';
DELETE 1
marc=# SELECT ctid,a from test;
ctid  | a
-------+---
(0,2) | 1


Marc.

Hors ligne

#4 08/10/2010 17:46:36

cébé
Membre

Re : Table sans OIDS ni clef primaire

Bonjour,
et... MERCI !!!!
Je suis arrivé à recrééer une clef primaire (avec mes 3 colonnes).

Il ne me reste plus qu'à chercher les éventuelles données que j'ai ... "foirées"
Au moins, la base est à nouveau utilisable !


encore une grand merci !!

cébé.

Hors ligne

Pied de page des forums