将列类型从整数更改为字符串
Changing a column type from integer to string
使用 PostgreSQL,将 integer
列类型迁移到 string
列类型的命令是什么?
显然我想通过将旧的整数数据转换为字符串来保留数据。
您可以开箱即用地从 INTEGER
转换为 CHARACTER VARYING
,您只需要 ALTER TABLE
查询更改列类型:
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
| col | pg_typeof |
|-----|-------------------|
| 1 | character varying |
| 10 | character varying |
| 100 | character varying |
我建议采用四步流程:
- 创建一个新的字符串列。现在将其命名为 temp。详情见http://www.postgresql.org/docs/9.3/static/ddl-alter.html
- 设置字符串列。类似
update myTable set temp=cast(intColumn as text)
的内容参见 http://www.postgresql.org/docs/9.3/static/functions-formatting.html 以获得更有趣的数字-> 字符串转换
确保临时文件中的所有内容都符合您的要求。
- 删除旧的整数列。再次请参阅http://www.postgresql.org/docs/9.3/static/ddl-alter.html了解详情
- 将 temp 重命名为旧列名称。再次:http://www.postgresql.org/docs/9.3/static/ddl-alter.html
这假设您可以在没有客户端连接的情况下执行该操作;离线。如果您需要在在线 table 中进行此(剧烈)更改,请查看设置一个带有实时更新触发器的新 table,然后切换到新的 table原子操作。参见 ALTER TABLE without locking the table?
使用 PostgreSQL,将 integer
列类型迁移到 string
列类型的命令是什么?
显然我想通过将旧的整数数据转换为字符串来保留数据。
您可以开箱即用地从 INTEGER
转换为 CHARACTER VARYING
,您只需要 ALTER TABLE
查询更改列类型:
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
| col | pg_typeof |
|-----|-------------------|
| 1 | character varying |
| 10 | character varying |
| 100 | character varying |
我建议采用四步流程:
- 创建一个新的字符串列。现在将其命名为 temp。详情见http://www.postgresql.org/docs/9.3/static/ddl-alter.html
- 设置字符串列。类似
update myTable set temp=cast(intColumn as text)
的内容参见 http://www.postgresql.org/docs/9.3/static/functions-formatting.html 以获得更有趣的数字-> 字符串转换
确保临时文件中的所有内容都符合您的要求。
- 删除旧的整数列。再次请参阅http://www.postgresql.org/docs/9.3/static/ddl-alter.html了解详情
- 将 temp 重命名为旧列名称。再次:http://www.postgresql.org/docs/9.3/static/ddl-alter.html
这假设您可以在没有客户端连接的情况下执行该操作;离线。如果您需要在在线 table 中进行此(剧烈)更改,请查看设置一个带有实时更新触发器的新 table,然后切换到新的 table原子操作。参见 ALTER TABLE without locking the table?