我有一个PostrgeSQL数据库,其中包含由大量行组成的表.我需要删除一些信息,为了加快速度,我们计划禁用对它的"FK约束"

总而言之,我的问题是; 如果我禁用单个表上的所有触发器,它们是也禁用从另一个表指向该表的"FK约束",还是应该单独禁用它们?

现在,我只需使用以下命令禁用所有触发器:

ALTER TABLE “table_name” DISABLE TRIGGER ALL

UPD:澄清了我关于FK的声明,我的意思是"FK约束"

推荐答案

创建外键约束时,PostgreSQL定义四个系统触发器:

  • 在参考表上,将有一个AFTER INSERT触发器和一个AFTER UPDATE触发器

  • 在被引用的表上,将有一个AFTER UPDATE触发器和一个AFTER DELETE触发器

因此,如果禁用被引用表上的所有触发器,您将能够删除行或修改键列,即使这会 destruct 引用完整性.

Postgresql相关问答推荐

Select 所有数组类型和维度

PostgreSQL(container)中使用80K子分区表处理共享内存不足错误

使用jOOQ在postgres上取消嵌套enum_range

使用 WHERE 子句创建递归视图

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

如何通过 DirectFunctionCall 发送 NULL 参数?

gorm 创建并返回值 many2many

Postgis 不只使用索引扫描

获取 OperationalError: FATAL: sorry, too many clients already using psycopg2

为什么 SQLAlchemy 不创建串行列?

为什么 PostgreSQL 将用户和组合并为角色?

Mac psql/readline - 未加载库

没有查询要创建的in ... error

如何使用 node-postgres 将多行正确插入 PG?

获取全文搜索配置语言的完整列表

如何使用 Node.js 和 Postgresql 找到最后一个插入 ID?

python pip install psycopg2 安装错误

PG::ConnectionBad FATAL:role "Myname" does not exist

如何在postgresql中编写关于最大行数的约束?

在 PostgreSQL 中使用 CASE 一次影响多个列