在postgres中无法将整数数据类型转换为bigserial

时间:2018-01-19 09:43:16

标签: postgresql

为了在postgres中将整数数据类型转换为bigserial,我运行了以下命令,但它没有改变它的数据类型,但是它改变了修饰符

CREATE SEQUENCE id;
ALTER TABLE user_event_logs ALTER COLUMN id SET NOT NULL;
ALTER TABLE user_event_logs ALTER COLUMN id SET DEFAULT nextval('id');
ALTER SEQUENCE id OWNED BY user_event_logs.id;

运行此功能后,显示输出

Column Type  Modifiers  this all my column heading and id  integer  not null 

我想将类型更改为bigserial

2 个答案:

答案 0 :(得分:2)

bigserial是bigint + sequence +默认值的快捷方式,因此如果您希望Longuser_event_logs.id而不是bigint,请使用:

int

https://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL

  

smallserial,serial和bigserial数据类型不是真正的类型,   但仅仅是创建唯一标识符的符号方便   列(类似于某些人支持的AUTO_INCREMENT属性   其他数据库)。

也:

  

类型名称serial和serial4是等效的:都创建整数   列。类型名bigserial和serial8的工作方式相同,   除了他们创建一个bigint列。

所以如果你想要ALTER TABLE user_event_logs ALTER COLUMN id type bigint; ,只需将volumn类型改为bigserial

答案 1 :(得分:0)

我不确定,你能尝试一下吗?

CREATE SEQUENCE id_seq;
ALTER TABLE user_event_logs ALTER COLUMN id TYPE BIGINT;
ALTER TABLE user_event_logs ALTER COLUMN id SET NOT NULL;
ALTER TABLE user_event_logs ALTER COLUMN id SET DEFAULT nextval('id_seq'::regclass);
ALTER SEQUENCE id_seq OWNED BY user_event_logs.id;