os: centos 7.4
db: postgresql 10.11

创建表后,有时需要对表进行 set not null 或者 drop not null 设置。

版本

# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
#
# su - postgres
$
$ psql -c "select version();"version
----------------------------------------------------------------------------------------------------------PostgreSQL 10.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)

create table

$ psql
psql (10.11)
Type "help" for help.postgres=#
postgres=# drop table if exists tmp_t4;
postgres=#
postgres=# create table tmp_t4(
id    int8,
name  varchar(100),
memo1 varchar(100),
memo2 varchar(100)
);postgres=#
postgres=# insert into tmp_t4
select id,md5(id::varchar),md5(id::varchar),null from generate_series(1,1000000) as id;postgres=# select * from tmp_t4 limit 5;id |               name               |              memo1               | memo2
----+----------------------------------+----------------------------------+-------1 | c4ca4238a0b923820dcc509a6f75849b | c4ca4238a0b923820dcc509a6f75849b | 2 | c81e728d9d4c2f636f067f89cc14862c | c81e728d9d4c2f636f067f89cc14862c | 3 | eccbc87e4b5ce2fe28308fd9f2a7baf3 | eccbc87e4b5ce2fe28308fd9f2a7baf3 | 4 | a87ff679a2f3e71d9181a67b7542122c | a87ff679a2f3e71d9181a67b7542122c | 5 | e4da3b7fbbce2345d7772b0674a318d5 | e4da3b7fbbce2345d7772b0674a318d5 |
(5 rows)postgres=# \d+ tmp_t4Table "public.tmp_t4"Column |          Type          | Collation | Nullable | Default | Storage  | Stats target | Description
--------+------------------------+-----------+----------+---------+----------+--------------+-------------id     | bigint                 |           |          |         | plain    |              | name   | character varying(100) |           |          |         | extended |              | memo1  | character varying(100) |           |          |         | extended |              | memo2  | character varying(100) |           |          |         | extended |              | postgres=# select oid,relname,relfilenode,relkind,relfrozenxid
from pg_class pc where pc.relname='tmp_t4';oid   | relname | relfilenode | relkind | relfrozenxid
--------+---------+-------------+---------+--------------123860 | tmp_t4  |      123860 | r       |       406588
(1 row)

set not null

对列中不含null进行 set not null 设置

postgres=# \timing on
Timing is on.
postgres=# alter table tmp_t4 alter column memo1 set not null;
ALTER TABLE
Time: 425.849 mspostgres=# \d+ tmp_t4Table "public.tmp_t4"Column |          Type          | Collation | Nullable | Default | Storage  | Stats target | Description
--------+------------------------+-----------+----------+---------+----------+--------------+-------------id     | bigint                 |           |          |         | plain    |              | name   | character varying(100) |           |          |         | extended |              | memo1  | character varying(100) |           | not null |         | extended |              | memo2  | character varying(100) |           |          |         | extended |              | postgres=# select oid,relname,relfilenode,relkind,relfrozenxid
from pg_class pc where pc.relname='tmp_t4';oid   | relname | relfilenode | relkind | relfrozenxid
--------+---------+-------------+---------+--------------123860 | tmp_t4  |      123860 | r       |       406588
(1 row)Time: 0.527 ms

对列中含null进行 set not null 设置

postgres=# alter table tmp_t4 alter column memo2 set not null;
ERROR:  column "memo2" contains null values
Time: 0.648 ms

报错,不能设置,对 0.648ms有点费解,怎么能在这么短时间发现有null 值

postgres=# update tmp_t4 set memo2=memo1 where id between 1 and 1000000;
UPDATE 1000000
Time: 16211.450 ms (00:16.211)postgres=# update tmp_t4 set memo2=null where id between 1000000 and 1000000;
UPDATE 1
Time: 534.788 mspostgres=# alter table tmp_t4 alter column memo2 set not null;
ERROR:  column "memo2" contains null values
Time: 72.370 ms

从时间上来看是要扫描数据列判断

drop not null

postgres=# alter table tmp_t4 alter column memo1 drop not null;
ALTER TABLE
Time: 319.677 ms
postgres=# 
postgres=# alter table tmp_t4 alter column memo2 drop not null;
ALTER TABLE
Time: 82.202 ms

参考:
http://postgres.cn/docs/10/sql-altertable.html

postgresql 数据库 alter table alter column set not null 的一些实践相关推荐

  1. v$lock之alter table drop column与alter table set unused column区别系列五

    背景 之前文章:   http://blog.itpub.net/9240380/viewspace-1814709/,涉及过如何删除表的某列,本文我们讨论下不同的删除表列语法参数,持锁模式的不同,便 ...

  2. MySQL 新增字段(alter table add column),报错:Duplicate entry

    问题 执行一个增加字段的DDL语句脚本时,报错,错误如下: Error 1062: Duplicate entry 'c51d3db8-59a5 2022-06-28 17:59:59' for ke ...

  3. postgresql 数据库 alter table alter column set default 的一些实践

    os: centos 7.4 db: postgresql 10.11 创建表后,有时需要对表进行 set default 或者 drop default 设置. 版本 # cat /etc/cent ...

  4. alter table add column多个字段_SQL对表中字段的操作 alter

    ALTER TABLE 语句用于在现有表中添加.删除或修改列. 注意不同的数据库的语句有所不一样 增加和删除都基本一致. 进行修改表中字段的时候注意: 本文主要介绍 sqlserver/mysql/o ...

  5. oracle drop column 多个,3000W记录,alter table drop column很慢

    最初由 yzm2008 发布 [B]Alter table T set unused(COLUMN) 和 drop column有什么区别吗? [/B] SET UNUSED Clause Speci ...

  6. alter table add column多个字段_ElementUI表格el-table表头固定自适应高度解决方案

    一.前言 ElementUI.iView都以相同的方式提供了表格组件表头固定的方法,即设置组件的height属性.表头固定很重要,就在于当表格数据项很多时,滚动条出现在表格组件内,而不是出现在表格组件 ...

  7. alter table add column多个字段_利用Python将多个excel合并到一个文件中

    数据岗位的小伙伴可能经常会遇到这样一个问题:多个来源返回的数据怎么整合到一个文件中?手动经常会出错,下面介绍一种利用Python处理的方式: 前期准备: 1.多个excel需要进行数据整理,保证文件的 ...

  8. alter table add column多个字段_WordPress 在文章列表快速编辑中编辑自定义字段

    在快速编辑中添加自定义字段,通常我们不需要在 WordPress 后台文章列表的"快速编辑"菜单中进行更改,但有的时候如果可以把常用的设置添加到"快速编辑"菜单 ...

  9. sql server 使用drop column 列名 删除列时报错,由于一个或多个对象访问此 列,ALTER TABLE DROP COLUMN stu_cou_num 失败

    删除没有任何其他引用的列时,出现了错误 仔细看了下这个列,并没有什么特殊.如下图: 但其确实有个约束: 'DF__HIS_DRUG___ALL_I__04E4BC85' . 为什么有这个约束呢??? ...

最新文章

  1. v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...
  2. Spark分析之Standalone运行过程分析
  3. ELK日志分析平台搭建全过程(自己做了测试,测试不完整因为原文章都是图片)
  4. CSS :before :after 伪类选择器
  5. springcloud~Eureka实例搭建
  6. 安装开源 ITIL 门户 iTOP
  7. linux upstart机制简介及封装应用
  8. vs能运行python吗_vs怎么运行python(vs能运行python吗)
  9. 羡慕,浙江大学的双 11 快递,全部由物流机器人配送
  10. Sharing A Powerful Tool For Calculate Code Lines
  11. 个性化推荐从入门到精通(附推荐产品经理修炼秘籍)
  12. PAT-BASIC-1003-我要通过!
  13. 虚拟环境安装python3
  14. 读书笔记之深入理解Java虚拟机
  15. ESP32使用DFROBOT通过MQTT服务器进行NFC读写
  16. 陀螺仪、加速计、磁力计等传感器汇总
  17. 黔江哪里可以学计算机,黔江有什么大学
  18. tc ebpf 实践
  19. One Drive 回收站文件太多时无法清空回收站解决办法
  20. 删除word中一段话的空格

热门文章

  1. type test css,React-Typescript 单元测试:Jest + Enzyme
  2. 码绘与手绘的比较【动态篇】
  3. “千年老二”Bing要翻身?
  4. .net报表控件ActiveReports教程:运行时修改数据(附源码)
  5. SQL Server 2008附加数据库时出错的解决方法
  6. Android 手机存储文件各种路径
  7. vim 快速格式化代码
  8. Windchill的历史
  9. 如何搭建一个数据库服务器平台
  10. B2美化通用子主题 WordPress主题