如果表的某列有默认值,例如
create table emp
(
flag smallint default 1
)
Run Code Online (Sandbox Code Playgroud)
那么,如果我不在插入语句中使用,则批量导入中的此默认列是否有任何影响。
根据文档:
11点之前:
添加具有默认值的列需要更新表的每一行(以存储新的列值)。但是,如果未指定默认值,PostgreSQL 能够避免物理更新。因此,如果您打算用大部分非默认值填充列,最好添加没有默认值的列,使用 UPDATE 插入正确的值,然后添加任何所需的默认值,如下所述。
11 及之后:
从 PostgreSQL 11 开始,添加具有常量默认值的列不再意味着执行 ALTER TABLE 语句时需要更新表的每一行。相反,默认值将在下次访问该行时返回,并在重写表时应用,使得 ALTER TABLE 即使在大型表上也非常快。但是,如果默认值是易失性的(例如,clock_timestamp()),则需要使用执行 ALTER TABLE 时计算的值来更新每行。为了避免可能冗长的更新操作,特别是如果您打算用大部分非默认值填充列,最好添加没有默认值的列,使用 UPDATE 插入正确的值,然后添加任何所需的默认值,如下所述。
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |