设为首页 收藏本站
查看: 919|回复: 0

[经验分享] postgresql 修改表

[复制链接]

尚未签到

发表于 2016-11-19 08:41:51 | 显示全部楼层 |阅读模式

修改

  如果你创建了一个后发现自己犯了一个错误,或者是应用的需求发生了变化,那么你可以删除这个然后重新创建它。但是如果这个已经填充了好多数据了,或者是该已经被其它数据库对象引用,(比如一个外键约束)那这可不是一个方便的选项。因此 PostgreSQL提供了一族命令用于修改现有。请注意它在概念上和修改一个中包含的数据是不一样的:这里我们感兴趣的是修改一个的定义,或者说结构。
  你可以


  •   增加字段,

  •   删除字段,

  •   增加约束,

  •   删除约束,

  •   修改缺省值,

  •   修改字段数据类型,

  •   重命名字段,

  •   重命名

  所有这些动作都是用 ALTER TABLE 命令执行的。


1. 增加字段

  要增加一个字段,使用下面这样的命令:

ALTER TABLE products ADD COLUMN description text;
  新增的字段对于中已经存在的行而言最初将先填充所给出的缺省值(如果你没有声明DEFAULT子句,那么缺省是空值)。
  你也可以同时在该字段上定义约束,使用通常的语法:

ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
  实际上,所有在 CREATE TABLE 里描述的可以应用于字段之选项都可以在这里使用。不过,我们要注意的是缺省值必须满足给出的约束,否则 ADD 将会失败。另外,你可以在你正确填充了新字段的数值之后再增加约束(见下文)。




2. 删除字段

  要删除一个字段,使用下面这样的命令:

ALTER TABLE products DROP COLUMN description;
  不管字段里有啥数据,都会小时。和这个字段相关的约束也会被删除。 不过,如果这个字段被另外一个的外键所引用,PostgreSQL 则不会隐含地删除该约束。你可以通过使用 CASCADE 来授权删除任何依赖该字段的东西:

ALTER TABLE products DROP COLUMN description CASCADE;
  参阅 Section 5.11 获取有关这些操作背后的机制的信息。




5.5.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;
  (如果你在处理一个生成的约束名,比如 $2,别忘了你需要给它 添加双引号,让它成为一个有效的标识符。)
  和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用 CASCADE。 一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。
  除了非空约束外,所有约束类型都这么用。要删除非空类型,用

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
  (要记得非空约束没有名字。)




5. 改变一个字段的缺省值

  要给一个字段设置缺省值,使用一个象下面这样的命令:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
  请注意这么做不会影响任何中现有的数据行, 它只是为将来 INSERT 命令改变缺省值。
  要删除缺省值,用

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
  这样实际上相当于把缺省设置为空。结果是,如果我们删除一个还没有定义的缺省值不算错误,因为缺省隐含就是空值。




6. 修改一个字段的数据类型

  把一个字段转换成另外一种数据类型,使用下面的命令:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
  只有在字段里现有的每个项都可以用一个隐含的类型转换转换城新的类型时才可能成功。 如果需要更复杂的转换,你可以增加一个  USING 子句,它声明如何从旧值里计算新值。
  PostgreSQL 将试图把字段的缺省值(如果存在)转换成新的类型, 还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。 在修改某字段类型之前,你最好删除那些约束,然后再把自己手工修改过的添加上去。




7. 给字段改名字

  重命名一个字段:

ALTER TABLE products RENAME COLUMN product_no TO product_number;



8. 给字段改名字

  给一个字段重命名:

ALTER TABLE products RENAME COLUMN product_no TO product_number;



9. 给改名字

  给一个重命名:

ALTER TABLE products RENAME TO items;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-302377-1-1.html 上篇帖子: PostgreSQL中继承 下篇帖子: PostgreSQL安装之后的几点配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表