在没有数据丢失的情况下增加postgres中字符变化类型的大小

Rol*_*and 44 postgresql

我需要在postgres数据库表中增加字符变化(60)字段的大小,而不会丢失数据.

我有这个命令

alter table client_details alter column name set character varying(200);
Run Code Online (Sandbox Code Playgroud)

此命令会将字段大小从60增加到200而不会丢失数据吗?

小智 79

用于更改特定列的数据类型限制的正确查询:

ALTER TABLE client_details ALTER COLUMN name TYPE character varying(200);
Run Code Online (Sandbox Code Playgroud)


Erk*_*lat 35

参考这个文档,不会有数据丢失,alter column只会将旧数据转换为新数据,因此字符数据之间的转换应该没问题.但我不认为你的语法是正确的,请参阅我之前提到的文档.我认为你应该使用这种语法:

ALTER [COLUMN]列TYPE类型[使用表达式]

作为一个注释,只是创建一个表,填充它并测试:)不是更容易


Tom*_*zky 6

是.但它会重写此表并在重写期间专门锁定它 - 任何试图访问此表的查询都将等到重写完成.

考虑将类型更改为文本并使用检查约束来限制大小 - 更改约束不会重写或锁定表.

  • 只是一个未来的笔记.在9.1中,某些类型的数据类型更改不需要重写.我相信这种情况可以使varchar像这样大. (5认同)
  • 从[PostgreSQL 9.1发行说明](http://www.postgresql.org/docs/9.1/static/release-9-1.html):E.10.3.4.2允许`ALTER TABLE ... SET DATA TYPE`到在适当的情况下避免表重写.但是@JustBob是错误的 - 增加varchar类型的长度确实需要重写,但是将varchar更改为text(并为长度检查添加约束)则不然. (4认同)