Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 04/05/2011 19:24:22
- unisol
- Membre
reparameter id non serial en serial
Bonjour,
suite à une importation, j'ai des champs non serial,
je souhaite les passer en serial. Mais PgAdmin ne me propose
pas de réaliser cette opération.
lorsque les tables sont vides, je réalise un drop table
DROP TABLE mode_paiement;
suivi d'une redéfinition de la table.
mais avec des données dedans c'est impossible.
qu'elle solutions a t'on dans un cas pareil
(passer
-- Table: mode_paiement
-- DROP TABLE mode_paiement;
CREATE TABLE mode_paiement
(
id bigint NOT NULL,
conditions character varying(50),
carence bigint,
nrosociete integer,
CONSTRAINT id_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE mode_paiement OWNER TO postgres;
Hors ligne
#2 04/05/2011 20:51:05
- kenrio
- Membre
Re : reparameter id non serial en serial
Bonjour,
il faut créer une séquence et la faire partir depuis le max de ta colonne.
Voici la requête donné dans une doc.
CREATE SEQUENCE base_id2_seq;
SELECT setval('base_id2_seq',(SELECT MAX(id2)from base));
ALTER TABLE base ALTER COLUMN id2 SET DEFAULT nextval('base_id2_seq');
Hors ligne
#3 04/05/2011 21:09:03
- gleu
- Administrateur
Re : reparameter id non serial en serial
Le seul moyen possible est celui par kenrio. Il n'est pas possible de changer le type d'une colonne par serial car serial n'est pas un type. C'est ce qu'on appelle un pseudo type.
Guillaume.
Hors ligne
#4 04/05/2011 21:14:21
- Marc Cousin
- Membre
Re : reparameter id non serial en serial
Exact. Une petite subtilité:
Pour que ça soit vraiment identique à un SERIAL, il faut rajouter
ALTER SEQUENCE base_id2_seq OWNED BY base.id2;
Comme ça, quand on drop la table base, la séquence part avec. Comme pour un serial...
Marc.
Hors ligne
Pages : 1