我在两个脚本中定义了一个表,如下所示(我不需要详细信息):
CREATE TABLE a (id BIGSERIAL NOT NULL PRIMARY KEY);
ALTER TABLE IMAGE ADD COLUMN b_id BIGSERIAL;
这会产生一个包含b_id
列BIGSERIAL
的表,并且是来自b
的表a
的外键。但是,这是不正确的,我需要(安全地)更改表格以放弃SERIAL
部分并将其保留为BIGINT
。 (基本上,如果有一个插件没有指定值,那么该列不应插入自动增加的数字。)
documentation表示SERIAL
只是将一个序列添加到基础数据类型,如果要从基于整数的类型移动到另一个类型,有很多结果可以手动执行此操作基于串行的类型,但不是相反的。文档说:
您可以删除序列而不删除列,但这样做 强制删除列默认表达式。
但是DROP SEQUENCE
的文档在使用什么名称以及它的影响方面非常轻松。
DROP SEQUENCE b_id
安全地获得我想要的结果(b_id
是一个简单的BIGINT
列吗?)答案 0 :(得分:4)
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)