Postgresql

如何生成約束sql?

  • August 14, 2021

我正在尋找一種可以SQL在選擇約束時生成創建 sql 的方法,例如 PgAdmin 的選項卡。(pg admin是怎麼做的?)

我想實現一個通用方法,可以在處理後刪除和重新創建外鍵約束。

Postgresql 具有pg_get_constraintdef函式,用於生成特定約束的創建語句。

這是一個例子;

架構 (PostgreSQL v13)

create table test (
 id integer primary key,
 data integer check (data between 1 and 100)
);


create table test2 (
 id integer primary key,
 data integer,
 test_id integer references test (id)
);

查詢 #1

select
   connamespace::regnamespace "Schema",
   conrelid::regclass "Table",
   conname "Constraint",
   pg_get_constraintdef(oid) "Definition",
   format ('ALTER TABLE %I.%I ADD CONSTRAINT %I %s;', 
               connamespace::regnamespace,
               conrelid::regclass,
               conname,
               pg_get_constraintdef(oid)
          )
   
 from pg_constraint 
 where 
   conname IN (
       'test_data_check', 'test_pkey', 
       'test2_pkey', 'test2_test_id_fkey' 
   );

在 DB Fiddle 上查看

引用自:https://dba.stackexchange.com/questions/298027