我想知道所有这些是否完全相同或是否存在一些差异.
方法1:
CREATE TABLE testtable ( id serial,title character varying,CONSTRAINT id PRIMARY KEY (id) );
方法:2
CREATE TABLE testtable ( id serial PRIMARY KEY,);
方法3:
CREATE TABLE testtable ( id integer PRIMARY KEY,); CREATE SEQUENCE testtable_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE testtable_id_seq OWNED BY testtable.id;
更新:我在网上发现了一些内容,通过使用原始序列,您可以为主键预先分配内存,这有助于您计划在下一分钟进行数千次插入.
试试看吧;删除第二个和第三个“变化”之后的“,”,以便它们运行,执行每一个,然后执行:
原文链接:https://www.f2er.com/postgresql/238872.html\d testtable
在每一个之后,你可以看到会发生什么.然后放下桌子,移到下一个桌子上.它看起来像这样:
Column | Type | Modifiers --------+-------------------+-------------------------------------------------------- id | integer | not null default nextval('testtable_id_seq'::regclass) title | character varying | Indexes: "id" PRIMARY KEY,btree (id) Column | Type | Modifiers --------+-------------------+-------------------------------------------------------- id | integer | not null default nextval('testtable_id_seq'::regclass) title | character varying | Indexes: "testtable_pkey" PRIMARY KEY,btree (id) Column | Type | Modifiers --------+-------------------+----------- id | integer | not null title | character varying | Indexes: "testtable_pkey" PRIMARY KEY,btree (id)
第一个和第二个几乎相同,只是创建的主键名称不同.在第三个中,当您插入数据库时,不再填充序列.您需要先创建序列,然后像这样创建表:
CREATE TABLE testtable ( id integer PRIMARY KEY DEFAULT nextval('testtable_id_seq'),title character varying );
获得与第二个看起来相同的东西.唯一的好处是你可以使用CACHE指令预先分配一些序列号.这可能是一个足够大的资源消耗,你需要降低争用.但是,在可能发生这种情况之前,你需要每秒进行数千次插入,而不是每分钟进行数千次插入.