gpt4 book ai didi

sql - 将 BIGSERIAL 转换为 BIGINT

转载 作者:行者123 更新时间:2023-11-29 11:56:44 25 4
gpt4 key购买 nike

我有一个跨两个脚本定义的表,如下所示(我省略了不需要的细节):

CREATE TABLE a (id BIGSERIAL NOT NULL PRIMARY KEY);
ALTER TABLE IMAGE ADD COLUMN b_id BIGSERIAL;

这会生成一个表,其列 b_idBIGSERIAL,并且是来自 的表 b 的外键一个。但是,这是不正确的,我需要(安全地)更改表以删除 SERIAL 部分并将其保留为 BIGINT。 (本质上,如果存在未指定值的插入,则该列不应插入自动递增的数字。)

documentation表示 SERIAL 只是将一个序列添加到基础数据类型,如果您想从基于整数的类型移动到基于序列的类型,有很多关于如何手动执行此操作的结果,但不是相反。文档说:

You can drop the sequence without dropping the column, but this will force removal of the column default expression.

但是文档要DROP SEQUENCE就使用什么名称及其影响而言,这非常简单。

  • 我可以DROP SEQUENCE b_id 安全地得到我想要的结果吗(b_id 是一个简单的 BIGINT 列?)
  • 我是否需要做任何其他事情来使表进入安全状态,而不会破坏值?

最佳答案

BIGSERIAL 已经是 BIGINT,它只是自动添加序列。如果你执行 \d a 就可以看到它。你会看到这样的东西:

                         Table "public.a"
Column | Type | Modifiers
--------+--------+------------------------------------------------
id | bigint | not null default nextval('a_id_seq'::regclass)
Indexes:
"a_pkey" PRIMARY KEY, btree (id)

所以就在那里您可以看到序列名称:a_id_seq。所以放弃吧。

=# DROP SEQUENCE a_id_seq CASCADE;
NOTICE: drop cascades to default for table a column id
DROP SEQUENCE

=# \d a
Table "public.a"
Column | Type | Modifiers
--------+--------+-----------
id | bigint | not null
Indexes:
"a_pkey" PRIMARY KEY, btree (id)

关于sql - 将 BIGSERIAL 转换为 BIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232173/

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