将列类型从整数更改为字符串

时间:2015-05-20 22:56:39

标签: sql postgresql database-migration

使用PostgreSQL,将integer列类型迁移到string列类型的命令是什么?

显然,我希望通过将旧的整数数据转换为字符串来保留数据。

2 个答案:

答案 0 :(得分:8)

您可以开箱即用INTEGER转换为CHARACTER VARYING,您只需ALTER TABLE查询字符串列类型:

SQL Fiddle

PostgreSQL 9.3架构设置

CREATE TABLE tbl (col INT);
INSERT INTO tbl VALUES (1), (10), (100);
ALTER TABLE tbl ALTER COLUMN col TYPE CHARACTER VARYING(10);

查询1

SELECT col, pg_typeof(col) FROM tbl

<强> Results

| col |         pg_typeof |
|-----|-------------------|
|   1 | character varying |
|  10 | character varying |
| 100 | character varying |

答案 1 :(得分:0)

我建议采用四个步骤:

  1. 创建一个新的字符串列。现在就命名为temp。有关详细信息,请参阅https://github.com/gruntjs/grunt-contrib-compass
  2. 设置字符串列。类似update myTable set temp=cast(intColumn as text)的内容,请参阅http://www.postgresql.org/docs/9.3/static/ddl-alter.html了解更多有趣的数字&gt;字符串转换
  3. 确保temp中的所有内容都符合您的需要。

    1. 删除旧的整数列。有关详细信息,请参阅http://www.postgresql.org/docs/9.3/static/functions-formatting.html
    2. 将temp重命名为旧列名称。再次:http://www.postgresql.org/docs/9.3/static/ddl-alter.html
    3. 这假设您可以在没有连接客户端的情况下执行操作;离线。如果您需要在联机表中进行此(剧烈)更改,请查看设置具有实时更新触发器的新表,然后在原子操作中交换到新表。见http://www.postgresql.org/docs/9.3/static/ddl-alter.html