2014-05-10 2 views

Répondre

19

Conversion d'un int en série more or less only means adding a sequence default to the value, donc pour en faire un numéro de série;

  • Choisissez une valeur de départ de la série, supérieure à toute valeur existante dans le tableau
    SELECT MAX(id)+1 FROM mytable

  • Créer une séquence pour la série (tablename_columnname_seq est un bon nom)
    CREATE SEQUENCE test_id_seq MINVALUE 3 (en supposant vouloir commencer à 3)

  • Modifier la valeur par défaut de la colonne pour utiliser la séquence
    Modifiez la séquence qui doit appartenir à la table/colonne;
    ALTER SEQUENCE test_id_seq OWNED BY test.id

A very simple SQLfiddle demo.

Et comme toujours, prenez l'habitude d'exécuter une sauvegarde complète avant en cours d'exécution modifiant les requêtes SQL de personnes au hasard sur l'Internet ;-)

-1
-- temp schema for testing 
-- ---------------------------- 
DROP SCHEMA tmp CASCADE; 
CREATE SCHEMA tmp ; 
SET search_path=tmp; 

CREATE TABLE bagger 
     (id INTEGER NOT NULL PRIMARY KEY 
     , tralala varchar 
     ); 

INSERT INTO bagger(id,tralala) 
SELECT gs, 'zzz_' || gs::text 
FROM generate_series(1,100) gs 
     ; 

DELETE FROM bagger WHERE random() <0.9; 
-- SELECT * FROM bagger; 

     -- CREATE A sequence and tie it to bagger.id 
     -- ------------------------------------------- 
CREATE SEQUENCE bagger_id_seq; 
ALTER TABLE bagger 
     ALTER COLUMN id SET NOT NULL 
     , ALTER COLUMN id SET DEFAULT nextval('player_id_seq') 
     ; 
ALTER SEQUENCE bagger_id_seq 
     OWNED BY bagger.id 
     ; 
SELECT setval('bagger_id_seq', MAX(ba.id)) 
FROM bagger ba 
     ; 

    -- Check the result 
    -- ------------------ 
SELECT * FROM bagger; 

\d bagger 
\d bagger_id_seq 
Questions connexes