13

我正在使用 PostgreSQL 9.1。

在 psql 中,我使用此查询来发现我在某个数据库中的约束...

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 任务),它将删除数据库中不是主键的约束。

4

1 回答 1

11

尝试查看表格:

information_schema.table_constraints 

其中constraint_type列 <> '主键'。我相信这应该给你关系的另一面。

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

于 2012-09-25T22:49:21.077 回答