【问题标题】:PostgreSQL Convert column from integer to textPostgreSQL 将列从整数转换为文本
【发布时间】:2012-01-10 17:06:06
【问题描述】:

我有一个 PostgreSQL (9.0) 数据库,其中的 card_id 列当前是整数类型

我需要将其更改为输入文本

实现这一目标的最佳方法是什么?

我能找到的唯一解决方案是创建一个临时列,删除原始列然后重命名,我认为它们可能是更好的方法??

【问题讨论】:

  • 文本列占用不同数量的磁盘空间。你不能只是让那个空间意味着不同的东西。即使在具有允许“仅更改类型”的 GUI 的 RDBMS 中,也会在后台创建一个新列并删除原始列。
  • 好的,你的意思是我必须创建一个新列? ta
  • 为什么可以。在幕后发生了一些可怕的事情,但无论如何都是在服务器端。

标签: sql database postgresql


【解决方案1】:

你有没有试过精品手册suggests

ALTER TABLE table ALTER COLUMN anycol TYPE anytype;

根据当前和新类型,您可能需要在此语句中添加USING ...。 但在你的具体情况下,我相信这不是必需的。

【讨论】:

  • IIRC 旧版本不支持
  • 此方法在大多数情况下都非常有效,但对其进行测试始终有助于确保它在您的工作负载下也能正常工作。假设您有 40 万亿行。使用此解决方案,它不会在一个事务中处理所有行吗?在这种情况下,您可能希望一次批量处理数据类型更改将执行的行数。为此,您需要一个临时列和/或表来批量处理数据。
  • 像这样更改列类型是作为表重写实现的,甚至不会尝试就地更新表数据。所以是的,一张大表需要相当多的时间和磁盘空间。用户必须自己决定更复杂的过渡的相对优点。
  • 先生,我给你小费
【解决方案2】:
ALTER TABLE table ALTER COLUMN card_id SET DATA TYPE text;

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多