1. ホーム
  2. sql

[解決済み] Postgresql でスキーマとテーブル名だけ知っていて主キー制約を削除する。

2022-03-10 20:02:37

質問

私の知る限り、Postgresqlで主キーを削除する唯一の方法は、次のとおりです。

ALTER TABLE schema.tableName DROP CONSTRAINT constraint_name;

デフォルトの制約名は tableName_pkey . しかし、テーブルの名前がすでに変更されている場合、元のテーブル名を取得して正しい制約名を作成することができないことがあります。

例えば、以下のように作成されたテーブルの場合 A にリネームした後 B 制約が残る A_pkey が、テーブル名だけ B .

スキーマ名とテーブル名だけ知っていて、pkey制約を削除する正しい方法を知っていますか?

私はこれを行うためのプログラムを書いているので、私はSQLクエリのみを使用する必要があります。pgAdminを開いて制約名を確認する"のような解決策はうまくいきません。

解決方法は?

カタログテーブルの情報は、このように使うことができます。

idを主キーとするテーブルを作成する

create table test1 (id int primary key, name text);

キーを削除するSQLを作成

select concat('alter table public.test1 drop constraint ', constraint_name) as my_query
from information_schema.table_constraints
where table_schema = 'public'
      and table_name = 'test1'
      and constraint_type = 'PRIMARY KEY';

という結果になります。

alter table public.test1 drop constraint test1_pkey

このクエリを抽出するストアド関数を作成し execute それを