如何在PostgreSQL表中更改列的数据类型?

kn3*_*n3l 87 sql postgresql alter-table alter-column psql

在PostgreSQL交互式终端中输入以下命令会导致错误:

ALTER TABLE tbl_name ALTER COLUMN col_name varchar (11);
Run Code Online (Sandbox Code Playgroud)

更改列的数据类型的正确命令是什么?

Der*_*omm 138

请参阅此处的文档:http://www.postgresql.org/docs/current/interactive/sql-altertable.html

ALTER TABLE tbl_name ALTER COLUMN col_name TYPE varchar (11);
Run Code Online (Sandbox Code Playgroud)

  • 对于其他一些情况,您可能需要指定转换的方式,如`ALTER TABLE tbl_name ALTER COLUMN col_name TYPE integer USING col_name :: integer;` (25认同)
  • @Nobu为什么我们在某些情况下必须这样做?那些情况是什么? (3认同)
  • @Darth.Vader 当列中已经存在无法自动转换的数据时,您可能需要执行此操作。 (3认同)

Lal*_*han 19

酷@derek-kromm,您的答案已被接受且正确,但我想知道我们是否需要的alter不仅仅是专栏。这是我们可以做的。

ALTER TABLE tbl_name 
ALTER COLUMN col_name TYPE varchar (11), 
ALTER COLUMN col_name2 TYPE varchar (11),
ALTER COLUMN col_name3 TYPE varchar (11);
Run Code Online (Sandbox Code Playgroud)

文档

干杯!!读简单写简单


and*_*har 13

如果列中已经存在数据,您应该执行以下操作:

ALTER TABLE tbl_name ALTER COLUMN col_name TYPE integer USING col_name::integer;
Run Code Online (Sandbox Code Playgroud)

正如@nobu 和@jonathan-porter 在对@derek-kromm 的回答的评论中所指出的,有点神秘。