我需要在postgres数据库表中增加字符变化(60)字段的大小而不会丢失数据。
我有这个命令
alter table client_details alter column name set character varying(200);
此命令会将字段大小从60增加到200而不会丢失数据吗?
答案 0 :(得分:77)
更改特定列的数据类型限制的正确查询:
ALTER TABLE client_details ALTER COLUMN name TYPE character varying(200);
答案 1 :(得分:32)
参考this文档,不会有数据丢失,alter column
只会将旧数据转换为新数据,因此字符数据之间的转换应该没问题。但我不认为你的语法是正确的,请参阅我之前提到的文档。我认为你应该使用这种语法:
ALTER [COLUMN]列TYPE类型[ 使用表达式]
作为一个说明,创建一个表,填充它并测试它会不会更容易:)
答案 2 :(得分:6)
是。但它会重写此表并在重写期间专门锁定它 - 任何试图访问此表的查询都将等到重写完成。
考虑将类型更改为文本并使用检查约束来限制大小 - 更改约束不会重写或锁定表。
答案 3 :(得分:1)
更改Postgresql 9.1版本中的列大小
在列中将varchar大小更新为更高的值时,在此锁定期间需要表重写,将在表和用户表上无法访问 直到表重写完成。
表名: - userdata 列名: - acc_no
ALTER TABLE userdata ALTER COLUMN acc_no TYPE varchar(250);
答案 4 :(得分:0)
来自PostgreSQL 9.2 Relase Notes E.15.3.4.2
增加varchar或varbit列的长度限制,或者完全删除限制,不再需要重写表。
答案 5 :(得分:0)
你可以使用下面的sql命令
ALTER TABLE client_details
ALTER COLUMN name TYPE varchar(200)