13

私はPostgreSQL9.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

私が間違っていることについて何か考えはありますか?


背景情報/動機

これを行う理由は、主キーではない制約をDBにドロップするスクリプト(具体的にはRakeタスク)を作成したいからです。

4

1 に答える 1

11

表を見てみてください:

information_schema.table_constraints 

ここで、constraint_type列 <> 'PRIMARY KEY' です。私はそれがあなたに関係の反対側を与えるべきだと信じています.

所有しているテーブルではなく、参照されているテーブルから制約を削除しようとしていると思います。

于 2012-09-25T22:49:21.077 に答える