如何在PostgreSQL中暂时禁用外键和主键约束?

时间:2016-04-20 05:53:31

标签: postgresql foreign-keys

我有一个有两个字段的表。结构是这样的:

CREATE TABLE raw_links
(
  value_id bigint NOT NULL,
  raw_id integer NOT NULL,
  CONSTRAINT raw_links_pk PRIMARY KEY (raw_id, dp_id),
  CONSTRAINT raw_fk FOREIGN KEY (raw_id)
      REFERENCES raw_data (raw_data_id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT
)

我必须从此表中删除500万条记录。为此,我想禁用这两个约束,以便删除更快。删除后我想创建两个约束。

1 个答案:

答案 0 :(得分:1)

ALTER TABLE DROP CONSTRAINT raw_links_pk可以执行raw_fkVACUUM ANALYZE raw_links

删除记录后,首先执行VACUUM FULL raw_links(如果要回收磁盘空间,请ALTER TABLE ADD CONSTRAINT ...),以更新表统计信息。

然后最终使用{{1}}重建约束。