Database 将记录插入到具有使用串行函数声明的列的表中

Database 将记录插入到具有使用串行函数声明的列的表中,database,postgresql,Database,Postgresql,我的数据库正在使用PostgreSQL。一个表使用的是串行自动增量宏。如果我想在表中插入一条记录,我是否仍需要指定该值,或者自动为我指定该值 CREATE TABLE dataset ( id serial NOT NULL, age integer NOT NULL, name character varying(32) NOT NULL, description text NOT NULL DEFAULT ''::text CONSTRAINT dat

我的数据库正在使用PostgreSQL。一个表使用的是
串行
自动增量宏。如果我想在表中插入一条记录,我是否仍需要指定该值,或者自动为我指定该值

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)
);

使用
DEFAULT
关键字或从
INSERT
列表中省略该列:

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

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

如果您创建了一个带有序列列的表,那么如果在向表中插入数据时忽略了序列列,PostgreSQL将自动使用序列并保持顺序

例如:

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)

这些查询对我有用:

insert into <table_name> (all columns without id serial)
select (all columns without id serial)
 FROM <source> Where <anything>;
插入(所有不带序列号的列)
选择(不带序列号的所有列)
从哪里来;

在这种情况下,插入多行对我不起作用:

create table test (
  id bigint primary key default gen_id(),
  msg text not null
)

insert into test (msg)
select gs
from generate_series(1,10) gs;
因为我错误地将genu_id函数标记为不可变


insert查询被优化为只调用该函数一次,而不是10次。哎呀…

这两种风格都不适合我。我还尝试了Insert-into-table_-name-values()@MuhammadNouman,然后您发现了一些错误,或者您使用的不是PostgreSQL。请发一个新问题。如果你愿意的话,在里面放一个链接,指向这张海报的上下文。
所有没有id序列的列
是一个特殊的关键字吗?@snowlebert不,这只是海报的简写。基本上意味着在列列表中包括任何非串行类型的列,在选择列表中也包括相同的列。