如何在 PostgreSQL 中按名称删除约束?
如何仅通过名称就可以删除 PostgreSQL 中的约束?
我有一个由第三方脚本自动生成的约束列表。我需要删除它们而不知道表名只是约束名称。
How can I drop a constraint in PostgreSQL just by knowing the name?
I have a list of constraints that are auto-generated by a 3rd party script. I need to delete them without knowing the table name just the constraint name.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您需要通过运行以下查询来检索表名:
或者您可以使用 pg_constraint 来检索此信息
然后您可以运行所需的 ALTER TABLE 语句:
当然您可以使查询返回完整的更改语句:
如果有多个模式具有相同的表,请不要忘记在 WHERE 子句(和 ALTER 语句)中包含 table_schema。
You need to retrieve the table names by running the following query:
Alternatively you can use
pg_constraint
to retrieve this informationThen you can run the required ALTER TABLE statement:
Of course you can make the query return the complete alter statement:
Don't forget to include the table_schema in the WHERE clause (and the ALTER statement) if there are multiple schemas with the same tables.
如果您使用 9.x 的 PG,您可以使用 DO 语句来运行它。只需执行 a_horse_with_no_name 所做的操作,但将其应用于 DO 语句。
If your on 9.x of PG you could make use of the DO statement to run this. Just do what a_horse_with_no_name did, but apply it to a DO statement.
删除右外键约束
注意:
Drop the right foreign key constraint
NOTE:
列出约束:
删除约束:
List contraints:
Remove the contraint:
要查找所需表的约束和删除约束:-
在版本13中,表名是schemaname.tablename
在删除约束之前获取DDL整个架构,casacade删除所有引用约束,这就是为什么需要获取所有架构DDL
在删除之前获取约束详细信息
生成删除约束脚本
添加删除约束,通过在步骤1中运行extract DDL(在匹配之前运行多次makeconstraint
通过运行步骤 2 验证约束
如果不匹配再次运行步骤 4,
To find constraints and Drop constraint for required tables :-
in version 13 , tablename is schemaname.tablename
get DDL whole schema before drop constraints , casacade drop all ref constraints , that why need get all schema DDL
get constraints details before dropping
Generate Drop constraint scripts
add drop constraints , by running extract DDL in step 1 ( run multiple times make constraint before after is matching
Validate constraint by running step 2
if not matching run step 4 again