Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL将列从整数转换为文本_Sql_Database_Postgresql - Fatal编程技术网

PostgreSQL将列从整数转换为文本

PostgreSQL将列从整数转换为文本,sql,database,postgresql,Sql,Database,Postgresql,我有一个PostgreSQL(9.0)数据库,其中有一个列card_id,当前的类型是integer 我需要将此更改为键入文本 实现这一目标的最佳方式是什么 我能找到的唯一解决办法是创建一个临时列,删除原始列,然后重命名,我认为这可能是一个更好的方法???您是否尝试过精细手册中的内容: ALTER TABLE table ALTER COLUMN card_id SET DATA TYPE text; 根据当前类型和新类型,您可能需要使用…将添加到此语句中。 但在您的特定情况下,我认为这是不必

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

我需要将此更改为键入文本

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


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

您是否尝试过精细手册中的内容:

ALTER TABLE table ALTER COLUMN card_id SET DATA TYPE text;
根据当前类型和新类型,您可能需要使用…将
添加到此语句中。

但在您的特定情况下,我认为这是不必要的。

文本列在磁盘上占用的空间不同。你不能让那个空间有不同的意义。即使在RDBMS中,有一个GUI允许“只需更改类型”,在幕后也会创建一个新列,并删除原始列。好的,那么你的意思是我必须创建一个新列?为什么你能。在幕后发生了一些可怕的事情,但无论如何,它是在服务器端。IIRC旧版本不支持此方法,但大多数情况下都能很好地工作,但测试它总是有助于确保它在您的工作负载下正常工作。假设你有40万亿行。有了这个解决方案,它不会在一个事务中跟踪所有行吗?在这种情况下,您可能希望一次批处理数据类型更改所需的行数。要做到这一点,您需要一个临时列和/或表来成批处理数据。像这样更改列类型是作为表重写来实现的,甚至不需要尝试就地更新表数据。因此,是的,对于一个大表来说,这将需要相当多的时间和磁盘空间。用户必须对更复杂的转换的相对优点做出自己的决定。先生,我向您致敬
ALTER TABLE table ALTER COLUMN anycol TYPE anytype;