Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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