如何在PostgreSQL中临时修改外键默认约束规则?
在PostgreSQL中简化外键级联规则的编写方法
PostgreSQL本身没有全局配置项可以直接修改外键默认的ON DELETE NO ACTION/ON UPDATE NO ACTION行为,但可以通过以下几种临时方法简化脚本编写:
使用psql自定义宏(会话级临时生效)
在当前psql会话中定义一个封装了级联规则的宏,后续创建表时直接调用即可:\set cascade_ref(sch, tbl, col) 'references ' :sch '.' :tbl '(' :col ') ON DELETE CASCADE ON UPDATE CASCADE'调用示例:
create table x ( y bigint :cascade_ref(schema1, table1, column1) );该宏仅在当前psql会话内有效,退出会话后自动失效,完全符合临时简化的需求。
批量预处理脚本(适用于文件型脚本)
如果你的建表脚本是本地文件,可以用文本替换工具批量添加级联子句,比如Linux/macOS下用sed命令:sed -i 's/references \([^ ]*\)\.\([^ ]*\)(\([^)]*\))/references \1.\2(\3) ON DELETE CASCADE ON UPDATE CASCADE/' your_script.sql执行后脚本中所有不带级联的外键引用都会自动补充
ON DELETE CASCADE ON UPDATE CASCADE子句,直接运行修改后的脚本即可。
内容的提问来源于stack exchange,提问作者Code4R7
相关产品推荐
相关产品推荐

