Sql 将空值的新列添加到大表中
我有一个超过1500万行的表,它的大小是6570MB。我需要在那张表上添加一个新的列,但这会花费太多时间 我尝试了以下方法,但在运行命令时似乎没有完成该过程:Sql 将空值的新列添加到大表中,sql,postgresql,ddl,Sql,Postgresql,Ddl,我有一个超过1500万行的表,它的大小是6570MB。我需要在那张表上添加一个新的列,但这会花费太多时间 我尝试了以下方法,但在运行命令时似乎没有完成该过程: ALTER TABLE table ADD created_by text default null ALTER TABLE table ADD created_by text null ALTER TABLE table ADD created_by text 完成此任务的最佳方法是什么?在PostgreSQL中添加一个可为空的列
ALTER TABLE table ADD created_by text default null
ALTER TABLE table ADD created_by text null
ALTER TABLE table ADD created_by text
完成此任务的最佳方法是什么?在PostgreSQL中添加一个可为空的列实际上是O(1),应该需要几毫秒的时间。它只更改表的元数据,不更改IO 如果您添加了一个不可为null的列-这是完全不同的,因为它实际上会将默认值写入所有行。并在整个过程中阻塞您的表
语句
ALTER TABLE ADD created_by text default null
与ALTER TABLE ADD created_by text
相同,在PostgreSQL中添加一个可为空的列实际上是O(1),需要几毫秒的时间。它只更改表的元数据,不更改IO
如果您添加了一个不可为null的列-这是完全不同的,因为它实际上会将默认值写入所有行。并在整个过程中阻塞您的表
语句
ALTER TABLE ADD created_by text default null
与ALTER TABLE ADD created_by text
此规则是否适用于早期版本的Postgresql?我得了9.4.9分version@SarvarNishonboev:关于添加可空列的部分适用于所有Postgres版本。Postgres 11引入了一个“快速默认”功能,其中添加一个带有默认值的列也会导致O(1)。该规则是否适用于Postgresql的早期版本?我得了9.4.9分version@SarvarNishonboev:关于添加可空列的部分适用于所有Postgres版本。Postgres 11引入了一个“快速默认”功能,其中添加一个带有默认值的列也会导致O(1)@a_horse_和_no_name。在这种情况下,为什么这个过程需要时间?@a_horse_没有名字,但即使是空的,它也需要太多时间time@SarvarNishonboev它可能在等一把锁。检查pg_stat_activity
@a_horse_,没有名字那是我的错。你说得对,表被锁定,在结束进程后,我能够在毫秒内添加一个null列。@a_horse_,没有名称。在这种情况下,为什么这个过程需要时间?@a_horse_没有名字,但即使是空的,它也需要太多时间time@SarvarNishonboev它可能在等一把锁。检查pg_stat_activity
@a_horse_,没有名字那是我的错。你说得对,表被锁定了,在结束进程后,我能够在毫秒内添加一个空的列。