一,修改表
PostgreSQL 提供了一族命令用于修改现有表。 
可以实现:
增加字段,
删除字段,
增加约束,
删除约束,
修改默认值,
重命名字段,
重命名表。
这些操作可以用:ALTER TABLE命令执行的。

1,增加字段
要增加一个字段,使用这条命令: 
ALTER TABLE products ADD COLUMN description text;
新增的字段对于表中已经存在的行而言最初将先填充空值。 
你也可以同时在该字段上定义约束,使用通常的语法: 
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
一个新字段不能用非空约束,因为最初的时候该字段必须包含空值。 但是你可以稍后增加一个非空约束。同样,你也不能在一个新字段 上定义默认值。根据 SQL 标准的说明,这样需要对现存行的新 字段填充默认值,而这个特性还没有实现。但是你可以稍后调整 字段预设。

2,删除字段
除一个字段: 
ALTER TABLE products DROP COLUMN description;

3,增加约束

要增加一个约束,使用表约束语法。比如:

ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

要增加一个不能写成表约束的非空约束,使用下面语法: 
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

这个约束将立即进行检查,所以表在加入约束之前必须符合约束条件。

4,删除约束
要删除一个约束,你需要知道它的名字。如果你给了它一个名字, 那么事情就好办了。
否则系统会分配一个生成的名字,这样你就需要 把它找出来了。psql 的命令 \d tablename 在这儿可以帮忙﹔ 
其它接口可能也提供了检查表的细节的方法。
命令: 
ALTER TABLE products DROP CONSTRAINT some_name;
除了非空约束外,所有约束类型都这么用。要删除非空类型,用 
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要记得非空约束没有名字。)

5,改变默认值
要给一个字段设定默认值,使用一个象下面这样的命令: 
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
要删除默认值,用 
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
这样相当于把预设设定为空,至少在 PostgreSQL里是这样的。 
如果删除一个还没有定义的默认值不算错误,因为预设隐含就是空值。

6,给字段改名字
重命名一个字段: 
ALTER TABLE products RENAME COLUMN product_no TO product_number;

7,给表改名字

To rename a table: 
ALTER TABLE products RENAME TO items;

8,  postgresql 9.0以后更改字段长度会重写表,如果表比较大,那么表会加锁,需要很长时间,这里介绍一种方法通过修改pg_attribute.atttypmod字段修改长度,不需要重写表

假如表中atttypemod为6,变长类型头信息占去4个字节,这里6-4=2就是我们字段的长度。

查看修改如下:

select atttypmod from pg_attribute where attrelid='hall_info'::regclass and attname='holiday';

update pg_attribute set atttypmod=19 where attrelid='hall_info'::regclass and attname='holiday';   (hall_info:表名,holiday:字段名,该字段长度改为:15)

注:创建一个作为外键的字段company_id

首先:     alter table dtb_order add column company_id int default 0;
再:         alter table dtb_order add foreign key(company_id) references dtb_transinfo;

实际项目中经常会遇到要修改表结构的需求, 现在总结下postgres中修改表结构

比如, 现在有个表,

CREATE TABLE  test
(
 id  bigint NOT NULL,
 name character varying,
  CONSTRAINT pk_test PRIMARY KEY (id)      -------这个个约束(constraint), 主键约束
)

WITH (

OIDS=FALSE
);
ALTER TABLE pets
  OWNER TO postgres;

1. 增加列, 修改主键

之前表有2个字段, id和name, id是主键, 现在有需求增加一个index, 并且需求是主键改为id和index, sql语句如下

alter table test add column test_index smallint not null default 0;          -----------增加一个列 test_index

alter table test drop constraint pk_test;        ----------------删除之前的主键约束

alter table test add constraint pk_test PRIMARY_KEY(id, test_index);           ------------重新增加一个主键

PostgreSQL数据库修改sql表的方法汇总相关推荐

  1. EFCore实现数据库水平分表的方法

    EFCore实现数据库水平分表的方法 水平分表 代码运行环境 实现方法 代码 实现步骤 EFCore 3.x 进一步封装 知识点总结 参考文章 水平分表 当我们数据库中某个表的数据量大到足以影响性能的 ...

  2. postgresql数据库修改表

    2019独角兽企业重金招聘Python工程师标准>>> 由于经常记不清修改表的命令,记录一下,转自postgreSQL 8.3文档 5.5. 修改表 如果你创建了一个表后发现自己犯了 ...

  3. SQL Server 2005中专用管理员连接 (DAC) 使用技巧修改系统表的方法

    Server 2005 专用管理员连接 (DAC) 使用技巧 1 什么是专用管理员连接? SQL Server 2005 为管理员提供了一种特殊的诊断连接,以供在无法与服务器建立标准连接时使用. 2 ...

  4. 数据库之SQL表列及语句

    数据库之DDL表的操作 一.数据类型 二.表属性 三.列的属性和约束 四.SQL语句应用 1.DDL(数据定义语言) 2.DCL(数据控制语言) 3.DML(数据操作语言) 4.DQL(数据查询语言) ...

  5. MYSQL数据库- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  6. mysql 修改表列名称_MYSQL数据库- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  7. 「SAP技术」SE16和SE16N修改后台表数据方法

    SAP中直接修改表.视图的Tcode有SE16N和SM30. 一 . SE16N界面输入&SAP_EDIT 其中使用SE16N修改表需要先输入命令&SAP_EDIT,回车左下角显示激活 ...

  8. C++ 修改注册表的方法

    这几天开始学习winCE,需要修改注册表来实现设备的禁用,因此研究了一下注册表的查询和修改! 网上有这样的程序可以参考,但不是很完整,所以在编程的过程中也出现了一些错误: 如在设置键值时,返回错误值5 ...

  9. 查看PostgreSQL数据库中所有表

    作为曾经干过运维的我来说,或许对大部分运维人员来说,不能依靠管理工具来操作数据库,如pgAdmin,经常远程登录到某一台数据库服务器,使用命令行的方式查询数据库中的表. 获取当前db中所有的表信息. ...

最新文章

  1. 关于BMP格式图像的理解和读写(c++).docx
  2. R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息
  3. irobot擦地机器人故障_自己动手修复 iRobot braava380t 电机故障
  4. PHP中对数据库操作的封装
  5. 数学图形之罗马曲面(RomanSurface)
  6. STM32 电机教程 28 - ST MCLIB实战之 位置闭环控制
  7. 防止UI界面被输入法遮挡(画面随输入法自适应)
  8. 窗体间传值和窗体间互操作
  9. 从StreamCorruptedException解析值:无效的流头消息
  10. BugkuCTF-Crypto题affine
  11. java使用队列实现栈思路_算法面试:队列实现栈的方案
  12. 小学三年级计算机导学案,小学三年级学科导学案.doc
  13. 02 Nginx和Keepalived高可用
  14. iocomp iPlot使用说明4 通道对象
  15. codeblocks 汉化
  16. 转载 兼容iphone5开发获取屏幕分辨率的问题
  17. React简介--尚硅谷react全家桶笔记总结
  18. ios 扇形 按钮_iOS 饼状图(扇形图)动画效果的实现
  19. 通达云OA2015版及钉钉、微信办公集成产品正式发布
  20. LeetCode(跳跃游戏)

热门文章

  1. python导入模块报错_Python 导入上层目录模块报错
  2. mysql server 5.0安装教程_MySQL Server 5.0安装教程
  3. mysql parameter_C#MySqlParameter问题
  4. 链表node中保存的是什么_Redis源码解析一 --链表结构
  5. 飞畅科技-工业以太网交换机市场发展情况介绍
  6. 工业以太网交换机的软件故障
  7. 什么是网络光端机?网络光端机工作原理及功能介绍!
  8. 【渝粤题库】国家开放大学2021春2768养禽技术题目
  9. 内部时钟和外部时钟隔离的Σ-Δ调制器
  10. 5g消息服务器,《5G消息白皮书》内容解读:5G消息是什么服务?