gpt4 book ai didi

database - 在 Postgres 中定义主键的方式有什么不同吗?

转载 作者:太空狗 更新时间:2023-10-30 01:48:57 24 4
gpt4 key购买 nike

我想知道这些是完全一样还是有什么不同。

方法一:

CREATE TABLE testtable
(
id serial,
title character varying,
CONSTRAINT id PRIMARY KEY (id)
);

方法:2

CREATE TABLE testtable
(
id serial PRIMARY KEY,
title character varying,
);

方法三:

CREATE TABLE testtable
(
id integer PRIMARY KEY,
title character varying,
);

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;

更新:我在网上发现了一些内容,说通过使用原始序列,您可以为主键预分配内存,如果您计划在下一分钟内执行数千次插入,这会有所帮助。

最佳答案

试试看;删除第二个和第三个“变化”之后的尾随“,”以便它们运行,执行它们中的每一个,然后执行:

\d testtable

在每一个之后,你可以看到会发生什么。然后放下 table ,移动到下一个。它看起来像这样:

 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 指令预先分配一些序列号。这可能是一个足够大的资源消耗,您需要降低争用。但是在这种情况可能发生之前,您需要每秒而不是每分钟执行数千次插入。

关于database - 在 Postgres 中定义主键的方式有什么不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com