web-dev-qa-db-fra.com

Insertion d'un enregistrement dans une table avec une colonne déclarée avec la fonction SERIAL

Ma base de données utilise PostgreSQL. Une table utilise la macro serial à incrémentation automatique. Si je veux insérer un enregistrement dans la table, dois-je quand même spécifier cette valeur ou doit-elle être automatiquement affectée? 

CREATE TABLE dataset
(
    id serial NOT NULL,
    age integer NOT NULL,
    name character varying(32) NOT NULL,
    description text NOT NULL DEFAULT ''::text
    CONSTRAINT dataset_pkey PRIMARY KEY (id)
);
39
AntiGMO

En utilisant le mot clé DEFAULT ou en omettant la colonne de la liste INSERT:

INSERT INTO dataset (id, age, name, description)
VALUES (DEFAULT, 42, 'fred', 'desc');

INSERT INTO dataset (age, name, description)
VALUES (42, 'fred', 'desc');
67
Craig Ringer

Si vous créez une table avec une colonne série, si vous omettez la colonne série lorsque vous insérez des données dans la table, PostgreSQL ™ utilisera automatiquement la séquence et conservera la commande.

Exemple: 

skytf=> create table test_2 (id serial,name varchar(32));
NOTICE:  CREATE TABLE will create implicit sequence "test_2_id_seq" for serial column "test_2.id"
CREATE TABLE

skytf=> insert into test_2 (name) values ('a');
INSERT 0 1
skytf=> insert into test_2 (name) values ('b');
INSERT 0 1
skytf=> insert into test_2 (name) values ('c');
INSERT 0 1

skytf=> select * From test_2;
 id | name 
----+------
  1 | a
  2 | b
  3 | c
(3 rows)
5
francs

Ces requêtes fonctionnent pour moi:

insert into <table_name> (all columns without id serial)
select (all columns without id serial)
 FROM <source> Where <anything>;
0
Hiram Walker