我怎么能只知道名字就放弃PostgreSQL中的约束?

我有一个由第三方脚本自动生成的约束列表.我需要在不知道表名的情况下删除它们,只知道约束名.

推荐答案

您需要通过运行以下查询来检索表名:

SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'

或者,您可以使用pg_constraint来检索此信息

select n.nspname as schema_name,
       t.relname as table_name,
       c.conname as constraint_name
from pg_constraint c
  join pg_class t on c.conrelid = t.oid
  join pg_namespace n on t.relnamespace = n.oid
where t.relname = 'your_table_name';

然后可以运行所需的ALTER TABLE语句:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

当然,您可以让查询返回完整的alter语句:

SELECT 'ALTER TABLE '||table_name||' DROP CONSTRAINT '||constraint_name||';'
FROM information_schema.constraint_table_usage
WHERE table_name in ('your_table', 'other_table')

如果有多个模式具有相同的表,不要忘记在WHERE子句(和ALTER语句)中包含table_模式.

Postgresql相关问答推荐

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

在Postgres游标中从一行变量中减go 另一行变量

JOOQ:数据库版本早于 COCKROACHDB 支持的方言:13.0.0

AWS RDS Postgres 性能缓慢的数据传输

从dump文件中恢复三张表遇到的问题

PostgreSQL:如何避免被零除?

Psycopg2 在大型 Select 查询中耗尽内存

在 Postgres 中查询 JSON 对象数组

PostgreSQL比较两个jsonb对象

try 访问本地主机中的数据库时如何解决Error: The server does not support SSL connections?

AWS RDS 公开访问

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

如何在 Postgres 中的列上删除唯一约束?

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

在 Postgresql 中获取星期几

Rails 3:在 Postgres 支持的 ActiveRecord 中使用 json 作为列类型时出现迁移错误

如何 Select 列值为空的行?

解释结果中的Recheck Cond是什么意思?

无法在 postgresql hibernate 中使用名为user的表

是否可以在 CSV 格式的 Postgres COPY 命令中关闭报价处理?