我有一个表在两个脚本中定义,如下所示(省略不需要的细节):
CREATE TABLE a (id BIGSERIAL NOT NULL PRIMARY KEY);
ALTER TABLE IMAGE ADD COLUMN b_id BIGSERIAL;
这会导致一个带有一个名为
b_id
的列的表,它是一个BIGSERIAL
类型并且是从a
表到b
表的外键。但是这是不正确的,我需要改变表格(安全地)以去除SERIAL
部分并将其保留为BIGINT
。(实际上,如果有一个插入不指定值,那么该列不应插入自动递增的数字。)文档显示, SERIAL 只是向底层数据类型添加一个序列。如果您想从基于整数的类型移动到基于序列的类型,则可以手动执行此操作,但反之则没有类似的结果。文档说:
但是 DROP SEQUENCE 的文档在使用名称和效果方面非常简单。您可以在不删除列的情况下删除序列,但这将 强制删除列默认表达式。
- 我能够安全地
DROP SEQUENCE b_id
以获得所需的结果(即b_id
是一个简单的BIGINT
列吗?) - 我是否需要执行其他操作以使表处于安全状态,并且不会破坏值?
Syntax error in SQL statement "DROP SEQUENCE IMAGE_EXPERIMENT_ID_SEQ CASCADE[*] ";
的错误。 - Nathaniel Ford[*] ";
吗?如果没有,请尝试不使用CASCADE
。 - Daniel LyonsDROP SEQUENCE IF EXISTS image_experiment_id_seq RESTRICT;
也会出现语法错误。但它是在使用 Flyway 运行的,所以可能有些奇怪的东西。 - Nathaniel Fordh2
数据库,该数据库不支持CASCADE
或RESTRICT
。 - Nathaniel Ford