赞助商

如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中

发布时间:2019-05-15 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要创建表我使用:
CREATE TABLE category
(
  cat_id serial NOT NULL,cat_name character varying NOT NULL,parent_id integer NOT NULL,CONSTRAINT cat_id PRIMARY KEY (cat_id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE category
  OWNER TO pgsql;

parent_id是另一个类别的id.现在我有一个问题:如何与其子级级联删除记录?我需要将parent_id设置为cat_id的外键.
我试试这个:

ALTER TABLE category 
ADD CONSTRAINT cat_cat_id_fkey FOREIGN KEY (parent_id)
      REFERENCES category (cat_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE

但它落在:

ERROR:  insert or update on table "category" violates foreign key constraint "cat_cat_id_fkey"
DETAIL:  Key (parent_id)=(0) is not present in table "category".

解决方法

您遇到的问题 – 层次结构顶部的类别的parent_id是什么?

如果它将为null – 它将破坏NOT NULL constratint.

如果它将是一些任意数字,如0 – 它将打破外键(如在您的示例中).

常见的解决方案 – 将NOT NULL constratint放在parent_id上,并将parent_id设置为null,用于顶级类别.

总结

以上是脚本之家为你收集整理的如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中全部内容,希望文章能够帮你解决如何使用PostgreSQL中的ALTER TABLE将外键约束添加到同一个表中所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。
标签: