postgresql 修改列类型操作
习惯了Oracle中:
ALTERTABLE表名ALTERCOLUMN列名新的数据类型[(长度)]NULL或NOTNULL
这种修改方式的时候,在pg中:
highgo=#createtablep1(idint,pswdvarchar(30),timetimestamp); CREATETABLE highgo=#insertintop1selectgenerate_series(1,500000),md5('random()::text'),clock_timestamp();
错误:对于可变字符类型来说,值太长了(30)
会发现无法添加成功呢?
highgo=#altertablep1altercolumnpswdtextNULL;
错误:语法错误在"text"或附近的
LINE1:altertablep1altercolumnpswdtextNULL;
我们来看一下pg中的语法:
highgo=#\hauto whereactionisoneof: ADD[COLUMN][IFNOTEXISTS]column_namedata_type[COLLATEcollation][column_constraint[...]] DROP[COLUMN][IFEXISTS]column_name[RESTRICT|CASCADE] ALTER[COLUMN]column_name[SETDATA]TYPEdata_type[COLLATEcollation][USINGexpression] ALTER[COLUMN]column_nameSETDEFAULTexpression highgo=#altertablep1alterCOLUMNpswdtypetext; ALTERTABLE highgo=#\dp1 Table"public.p1" Column|Type|Collation|Nullable|Default --------+-----------------------------+-----------+----------+--------- id|integer||| pswd|text||| time|timestampwithouttimezone|||
成功!
补充:postgresql修改字段类型为数组类型(text改为text[])
语法:
altertabletablenamealtercolumnnametypeoldcolumntypeUSINGcolumnname::newcolumntype
eg:
altertabledirty_trackalterlabelstypetextUSINGlabels::text[];
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。