Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Sql 将空值的新列添加到大表中_Sql_Postgresql_Ddl - Fatal编程技术网

Sql 将空值的新列添加到大表中

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中添加一个可为空的列

我有一个超过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中添加一个可为空的列实际上是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_,没有名字那是我的错。你说得对,表被锁定了,在结束进程后,我能够在毫秒内添加一个空的列。