为什么PostgreSQL在我尝试删除约束时不存在约束?

时间:2012-09-25 21:59:32

标签: postgresql

我正在使用PostgreSQL 9.1。

在psql中我正在使用此查询来发现我在某个DB中有哪些约束...

SELECT
  *
FROM
  information_schema.constraint_table_usage
WHERE
  constraint_table_usage.table_catalog = 'journal_app_development'
AND
  constraint_table_usage.constraint_name NOT LIKE '%_pkey';

...输出

        table_catalog      | table_schema | table_name |   constraint_catalog    | constraint_schema | constraint_name 
  -------------------------+--------------+------------+-------------------------+-------------------+-----------------
   journal_app_development | public       | users      | journal_app_development | public            | fk_entry_user
   journal_app_development | public       | users      | journal_app_development | public            | fk_user_task
  (2 rows)

但是当我尝试删除约束时,我得到一个错误......

# ALTER TABLE users DROP CONSTRAINT "fk_entry_user";
ERROR:  constraint "fk_entry_user" of relation "users" does not exist

知道我做错了吗?


背景信息/动机

我这样做的原因是我想编写一个脚本(特别是一个Rake任务),它将删除数据库中不是主键的约束。

1 个答案:

答案 0 :(得分:6)

尝试查看表格:

information_schema.table_constraints 

其中constraint_type列<> '首要的关键'。我认为应该给你关系的另一面。

我相信你试图从引用的表中删除约束,而不是拥有它的那个。