我正在使用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任务),它将删除数据库中不是主键的约束。
答案 0 :(得分:6)
尝试查看表格:
information_schema.table_constraints
其中constraint_type
列<> '首要的关键'。我认为应该给你关系的另一面。
我相信你试图从引用的表中删除约束,而不是拥有它的那个。